perm filename E.ALS[UP,DOC]101 blob
sn#522861 filedate 1980-07-14 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00036 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00005 00002 Recent NEWS about E, newest news first.
C00061 00003 INDEX of commands.
C00092 00004 Abbreviations and explanation of E documentation. Credits.
C00096 00005 General remarks.
C00106 00006 PAGE CHANGING, APPENDING, DIVIDING, COMBINING, CANCELLING: XAPPEND XTHISPAGE β<ff> XMARK XDELETE XCANCEL
C00116 00007 WINDOW and ARROW moving commands.
C00133 00008 LINE MARKING commands.
C00137 00009 LINE-EDIT commands.
C00159 00010 Attach and Copy commands: A C
C00170 00011 LINE INSERT mode.
C00181 00012 Handling very long lines. XBREAK XJOIN
C00185 00013 Search commands: F XFIND * XEXACT F<string>P F<string>: XSSLINE XSSPAGE
C00212 00014 SUBSTITUTION commands: \
C00224 00015 FILE-SWITCHING and text transfering commands: ε λ ∃ ? XPOINTER
C00241 00016 Justification: XJFILL XJUST XJGET XSJFILL XSJUST
C00261 00017 Commands for tabular material: XTABLE XTJFILL XTJUST XTJGET XTGET
C00276 00018 MARGIN CONTROL commands: XALIGN XINDENT → ← XCENTER
C00285 00019 Other EXTENDED commands: X<cmd> Xα<cr>
C00320 00020 System commands and file SWITCHES.
C00350 00021 Using E from a non-display (TTY). XTYPE XNUMBERS XHEADER XTRAILER XCONTROL XMETACONTROL
C00366 00022 PARENTHESIS finding/matching commands: ( ) XLPAREN XRPAREN ↔ XPAREN XPINFO
C00378 00023 Swapping To and From E via RPG startups: XRSYS XRUN XGORPG XDRD XTV
C00385 00024 Message and paragraph handling commands: ∂<cmd> 0∂ !<cmd> 0!
C00399 00025 Macros: XDEFINE Z Y ≡ ∩ ∪ ⊂ ⊃ $ % ~ _ XCASE XRESUME XABORT # XSTOPALL XSTOPONE XSTOPZERO XSTOPHOW XSILENT XRAPID
C00435 00026 Numeric Macros and Readonly Variables: XSET XARGUMENT XMULTIPLY XDIVIDE XREMAINDER XADD XSUBTRACT XMINIMUM XMAXIMUM XIFLT XIFLE XIFGE XIFGT XIFEQ XIFNE XCHARACTER
C00462 00027 Macros and Command Files: XEXECUTE PUTDEFS XCOMMENT XATTACH XREDEFINE
C00473 00028 Debugging macros: XSAY XAUTOSTEP XSTEP &
C00480 00029 BOOK MODE (/B) and the BOOK command
C00487 00030 E files extended by other programs. XUPDATE -XUPDATE
C00492 00031 Filenames, numeric extensions, and filehacks
C00501 00032 Generating a new directory line: XNDFAIL XNDSAIL XNDBBOARD
C00510 00033 Altering the use of the display screen: XTOPSET XBOTSET XATTSET XHEIGHT
C00518 00034 αβS. N,O,H: Line, Page & File stacks. XHOME XBACKGO XZFILES XZPAGES XZLINES
C00539 00035 Undeleting lines of text: XUNDELETE
C00544 00036 Lisp code indenting commands: α/ αβ/ XLISPSYNTAX
C00554 ENDMK
C⊗;
Recent NEWS about E, newest news first.
Index of E commands is on p. 3; table of contents is on p. 1.
A history of older E changes is in E.UPD[UP,DOC].
∂14 Jul 80 -- Minor changes.
Terse mode suppresses the messages (from ⊗XZFILE command and file switching):
"Current file record shifted to 0, the rest have been flushed".
"Fileswitch list full -- replacing FILE.EXT".
The error "No such readonly variable" is now a permanent STOPALL macro error.
∂11 Jul 80 -- Changing pages (or files) with the current page having
been changed, but with the file in READONLY mode, is now a permanent
STOPALL macro error.
∂27 Jun 80 -- New good and bad extensions added to lists.
The extensions .MSG and .AL have been added to E's list of good file
extensions to look for, and the extensions .BIN and .PIC have been
added to E's list of bad file extensions to avoid. The complete lists
of extensions are now displayed on p. 31 of this file (E.ALS).
∂24 Apr 80 -- Two minor changes.
The character "#" is now allowed to precede filenames to be referenced
by the ⊗XPOINTER command.
The extension .DO has been added to E's list of good extensions to look
for, and the extension .VRN has been added to the bad extension list.
∂7 Feb 80 -- Misc. minor features.
⊗XEXACT now legal from line editor.
Fix to ⊗XCENTER command to avoid dying on syntax error in command.
New readonly variables:
MDEPTH. Current macro depth.
EXACT. Positive for ⊗XEXACT mode.
⊗XPAREN cmd suppresses "Using symbol pair .." when in macro or terse mode.
Failure to open file by ⊗XOPEN command is no longer permanent STOPALL error.
⊗XEXACT cmd with non-zero arg suppresses status report in Terse mode.
Extended command buffer elongated to hold about 160 chars.
∂25 Jan 80 -- Minor macro improvements; fix to ⊗XEMPTY and ⊗XNONEMPTY.
The commands ⊗XEMPTY and ⊗XNONEMPTY now work as advertised when given
negative arguments (namely, they back up that many empty/nonempty lines).
To avoid having the ⊗XEXECUTE of one file aborted when a command file
executes another command file of a similar name, the ⊗XEXECUTE command
now tries to avoid duplicating a macro name that already exists. This
command makes up a name for the macro to represent the file being
executed, normally by inserting a dot (".") in front of the the primary
name of the file (e.g., ".EINIT"). But if that macro name already
exists (because you are executing one file from another, both with the
same primary file name), then, in order to generate a unique macro
name, the leading character is incremented from "." to "/", and then,
if still necessary, through the characters "./0123456789:;<=>?@".
When incore text that you have changed cannot be written out (e.g., from
the directory page), a warning message to that effect is normally
given. This warning message, however, is now suppressed if the text is
being changed from within a macro. This is to allow macros to change
such text for purposes such as generating other macros from the incore
text. However, any attempt to write out such text from within a macro
will stop all macros fatally (after the current command from macro).
∂16 Jan 80 -- Lots of new readonly variables.
The ⊗XNDBBOARD command is now illegal in the Gripes file.
The following readonly variables have been added:
EDLINE. This flag is 1 iff you are in the line editor editing a line
of text.
WFLAG. This flag is 1 iff the W flag in the header is on (page
changed).
NMODE. This flag is 1 iff the file is being edited in /N mode.
RMODE. This flag is 1 iff the file is being edited in /R mode.
IMODE. This flag is 1 iff you are currently in line insert mode.
RAPID. This flag is negative iff RAPID simulation of the line editor
by macros is disabled.
TERSE. This three-state flag is -1 when in TERSE mode, 0 in NORMAL
mode, and 1 when in VERBOSE mode.
SILENT. This flag is positive iff macro error messages are suppressed.
STOPHO. This three-state flag is -1 when in STOPALL mode, 0 in
STOPZERO mode, and 1 when in STOPONE mode.
CHECK. This flag is negative iff internal error checking of free
storage is disabled.
UNDMAX. This is the maximum number of characters that will be saved in
lines that can be undeleted.
UNDCHS. This is the current number of characters in lines that can be
undeleted.
UNDLNS. This is the current number of lines that can be undeleted.
AUTOBU. This is the current threshold of null records for autoburping.
This number is non-positive if autoburping is disabled.
BRKCOL. This is the current default column at which ⊗XBREAK will break
lines.
ECHO. This flag is negative if echoing of line editor input is
disabled.
∂22 Sep 79 -- Right single quote (') added to sentence ending bracketers.
For the justification commands, the character right single quote (') has
been added to the list of special characters >]}")' that are considered
part of a sentence immediately preceding that is ended with one of the
.?!: characters. The right quote character is included since single
quotes are sometimes used (either singly or doubled) to quote sentences.
∂17 Aug 79 -- ⊗XRAPID mode macro bug fix; improved .> extension feature.
A bug has been fixed in E's macro line editor simulator (simulator invoked
in ⊗XRAPID mode (the default mode)). The bug only struck when a β<cr> was
typed in the line editor while positioned at a <tab> that wasn't the
equivalent of 8 spaces at the time.
When the filename extension .> is given for a file that has to be created,
the extension of the newly created file will be generated by incrementing
the largest previously existing numeric extension found (with the given
primary file name). That is, if you say, for example, ⊗ε FOO.>/C or
⊗ε FOO.> ← BAZ and if you already have files FOO.1 and FOO.2, then the
new file created (or copied from BAZ) will be called FOO.3. If leading
zeroes were present in the previous largest numeric extension, then they
will be present in the new extension. If the previous extension was .999,
then the new extension will be .000. If you say ⊗ε FOO.> ← FOO.> and
if you already have FOO.1 and FOO.2, then FOO.2 will be copied to FOO.3
and E will then edit FOO.3.
∂1 Aug 79 -- Who else is using the file you want to write out!
The ⊗XOPEN command, which opens the file for writing in order to lock
other users out of the file, now first finds out if anyone else is already
using the file. If so, then ⊗XOPEN will fail and report who is using the
file (this failure is a permanent-STOPALL error for macro expansion).
Formerly, ⊗XOPEN was not permitted to fail, so if the file were busy, you
got kicked out to the monitor and could either do a CONTINUE to re-try or
a REENTER to save your text. Those options are still the only ones
available if the file is busy when you actually try to write it out. If
you think someone else might be using the file, then use the ⊗XOPEN
command instead of the ⊗. command.
With a zero argument, ⊗0⊗XOPEN simply tells you who else, if anyone, is
using the file that you are currently editing. That is, the zero argument
suppresses the actual attempt to open the file, but it tells you whether
you could open the file successfully if you wanted to.
When you try to switch to a file that is busy, E now reports who is using
the busy file.
∂25 Jul 79 -- E now reports which jobs are using a file that you try to write.
E uses the new FILUSR UUO to find out who is using the file you have
been editing when your attempt to write out a page fails because the
file is busy. E types out the wholine of each job with the file open.
∂5 Jul 79 -- ⊗XPOINTER command doesn't accept ".>>" as extension.
∂2 Jul 79 -- Free /N mode for one-page files has now been completed.
E now allows you to change from READONLY mode to READWRITE mode when
exiting from a one-page directoryless file, since one-page files are
always formatted correctly even without a directory. Accordingly, E no
longer complains when you make an incore change to the text of a one-page
file that is open in /R mode, since you'll get a chance later to change
to READWRITE mode. In summary, it is now very convenient to maintain
and edit one-page files without an E directory.
Also, E no longer asks the question "Will you settle for /N mode?" when
you ask it to edit a file that has no directory. (This was the third
and last question asked in the sequence of formatting questions.) You
can, however, still respond /N to either of the first two questions, and
of course, you can still use the /N switch after a filename.
∂21 Jun 79 -- Extensions .WL and .WLS (text files) taken off bad extension list.
∂17 Jun 79 -- ⊗XSPOOL and ⊗XXSPOOL no longer include E header & trailer lines.
By popular demand, the ⊗XSPOOL and ⊗XXSPOOL commands have been modified
to omit the E header and trailer lines from the text sent to the spooler.
Also, any incore pagemark that is among the text being spooled will be
printed as a normal formfeed, causing the following text to be printed
on a separate page by the spooler.
∂5 Jun 79 -- Free /N mode for one-page files.
When you try to edit a one-page directoryless file not in /R mode, E will
no longer ask you about formatting the file. Instead, E will
automatically open the file in /N mode, but WITHOUT RECOPYING THE FILE.
This works for one-page files because they are always formatted properly
(each page beginning on a record boundary). Thus, switching to a
one-page file is now slightly faster (no copy is made) and no longer
requires one of the /N or /R switches.
∂27 May 79 -- ⊗XPOINTER command accepts filenames like PROGR.>[1,PRG].
Also, a bug in ⊗XREDEFINE's handling of comments starting with ⊗; is fixed.
∂27 Apr 79 -- Two minor bug fixes.
A DM display bug has been fixed that caused the number of the arrow line
to overwrite the line editor in a rare situation when overtyping the row
of stars.
A bug in the spooler subroutine has been fixed that caused E to sometimes
be stopped with the system error message Non-ex Name or Number when the
spooler job did not exist.
∂11 Apr 79 -- ⊗XDFIND command added to start up FIND program on another job.
⊗XDFIND starts up the FIND program on another job and passes it the
entire extended command line (starting with the DFIND) to have it search
a given file for some string(s). When the FIND program finishes, it will
report the results of the search by typing out a special message on the
initiating terminal. This can be useful for having FIND look up a
suspected word spelling in the unabridged dictionary (the default file to
search); however, note that searching the unabridged dictionary takes
about 12.5 seconds of (wholine-type) runtime. You can use DFIND to
search any given file by using the standard syntax of the FIND program,
which is documented in FIND.DON[UP,DOC]. (Note that you cannot run the
FIND program with command FIND or OFIND; only the DFIND command is
available for running the FIND program from E.)
The ⊗XDFIND command starts up a phantom job to do the search, and a
summary of the results are sent to your terminal. The summary includes
the number of hits, as well as the first, last, and (if different)
shortest "hit" lines. The syntax of the DFIND command in E is the same
as that of the monitor command, with the same defaults for the WITHIN,
OMIT, and IN clauses. (If you specify a WITHIN other than the default of
WITHIN LINE, only the lines containing the hit will be reported. This
isn't quite the same as WITHIN LINE, since a text unit containing several
matches yields only one hit.)
If you type just ⊗XDFIND<cr>, the current line of text (or the first
line of attached text, if any) will be used to specify the search
parameters.
∂5 Apr 79 -- [MUS,DOC] added to list of PPNs searched by READ command.
∂3 Apr 79 -- ⊗X RAPID mode is now the default.
Also, E now ignores the /x,yM switch if the mark table is already full.
∂14 Mar 79 -- New WINTOP. and SRCHAR. readonly variables, plus misc.
Two new readonly variables have been added:
SRCHAR. The character position of the place where the last search
string was found on the current line; this is the position
where the α<cr> command will take you if you aren't already in
the line editor. A value of 0 represents the first character
in the line, and a value of -1 means no successful search was
recently done ending on the current line.
WINTOP. The number of the top line in the current window, relative to
the first incore line (NOT relative to the current page).
"Calls on stack deleted for macro ..." suppressed in Terse mode.
Maximum display height supported increased to 62 (decimal) (for simulated DMs).
∂3 Mar 79 -- Omitted second arg in two-arg filename switches defaults to zero.
This allows you to type, for example, ET \B/11M/22M/33M,\G/4M<cr> to put
line marks at the beginnings of pages 11, 22 and 33 in the BBOARD file,
and page 4 in the GRIPES file (in case the CKSUM program just told you
that those pages had changed, for example). Then you can use the αM
command to get to the indicated pages. In this case, the second arg of
each /M switch is omitted (the second arg is the line number), but is
taken to be zero; formerly, an omitted second arg got a random value.
(Remember that you cannot add marks to a file that already appears in
your file stack, e.g., from a previous edit, since that file's old line
marks are restored.)
∂20 Feb 79 -- New listing of commands at beginning of each page of E.ALS.
In the main part of E.ALS, every page that describes one or more
particular commands now begins with a list of all commands described on
that page. This list is a duplication of all the one-line entries from
the index on page 3 that refer to the given page. Thus the beginnings of
every page of E.ALS along with the directory together form a "functional
index" of E commands.
∂9 Feb 79 -- New search limiting capability, readonly variables, and more.
The commands ⊗XSSLINE and ⊗XSSPAGE set or report the limit line number
and limit page number for searches and substitutions. These commands can
be used to keep searches and substitutions from going beyond a given
incore line or a given page; search limiting affects these commands:
⊗F ⊗XFIND ⊗* ⊗\ ⊗( ⊗) ⊗XLPAREN ⊗XRPAREN
The ⊗#⊗XSSLINE command sets the search-limiting incore LINE number to the
given argument (#), and similarly ⊗#⊗XSSPAGE sets the search-limiting
PAGE number to the argument (#). In both cases, if the argument is
relative (⊗+ or ⊗- used), then the limit is set by the command at the
given distance (lines or pages) from the current place (line or page)
(but is fixed once set by the command; that is, it is not permanently
relative to the arrow's position). If the argument is omitted entirely,
then the corresponding type of search limiting is disabled. A zero
argument will cause E simply to report the given search-limit.
Search-limiting stops any search (except a directory search, see below)
that encounters the given limit line or the beginning of the given limit
page; for instance, ⊗5⊗XSSPAGE will stop any search that encounters the
beginning of page 5, so page 5 will NOT be searched (but a search started
already on page 5 won't be limited). As another example, ⊗+⊗XSSLINE will
limit any search to the current line, since it will stop any search upon
reaching the following line. The search-limiting LINE number applies
only to incore text and is cleared when you flush all incore text (e.g.,
by going to another page or by doing an ⊗XCANCEL command). The
search-limiting PAGE number applies both to incore pagemarks and to
not-in-core pages (the latter reached only by the ⊗XFIND, ⊗XLPAREN, and
⊗XRPAREN commands); the limiting page number is cleared when you change
files. Search limiting is always completely disabled during directory
searches (e.g., ⊗F...⊗P and ⊗F...⊗:).
Any incore limit line number set up is adjusted for text insertion and
deletion, to preserve the point in the text at which searches will stop.
Currently, however, any limit page number is NOT adjusted for page
insertion/deletion. The two new readonly variables SSLINE. and SSPAGE.
are available for macros to find out the current search limits; a
negative or zero value means the corresponding type of search limiting is
disabled. Note that the limit LINE number is counted from the beginning
of ALL incore lines, not just relative to the current page if you have
more than one page in core.
Three new readonly variables have been added for finding out how many
occurrences of the current search string were
(1) searched for: NFIND.
(2) found: NFOUND.
(3) substituted for: NSUBST.
in the last search (or substitution) command. If that search included at
least one successful substitution, then NFOUND. will be zero and NSUBST.
will be positive. If the last search did not do (but maybe tried and
failed) any substitutions, then NSUBST. will be zero and NFOUND. will be
the number of occurrences found (possibly zero). NFIND. contains the
requested number of search or substitution repeats. The only slightly
obscure case is a command like ⊗4⊗F...⊗\...αβ9<cr>, which asks to do 9
substitutions starting with the 4th occurrence; if less than 4
occurrences are found, then NFIND. will be 4, NFOUND. will be less than
4, and NSUBST. will be zero, but if 4 or more occurrences are found, then
NFIND. will be 9 (NOT 4), NFOUND. will be zero (meaning we did some
substitutions), and NSUBST. will be the number of substitutions done.
The filehack \NEWS has been added to access the new NYT NewsSummary file
NEWS.TXT[2,2]. The NYT NewsSummary is similar to the AP News Digest.
The αXSAY command no longer puts a space at the end of the text it types
out. You can of course put a space at the end of the αXSAY command line.
The command ⊗\ no longer accidentally ignores the first #-1 occurrences
if you had just given a ⊗#⊗* command. Also, ⊗#⊗F...⊗\...⊗∞<cr> no longer
substitutes only for every #th occurrence, but does every occurrence
starting with the #th, as previously advertised.
E now correctly detects an old E directory in a file that has been edited
with SOS and which now has line numbers. You get a chance to flush the
directory when you are reformatting with E (formerly E treated the old
directory as plain text).
⊗XEXECUTE and ⊗XPUTDEFS now set the new default filename for these
commands only upon success in reading or writing the given file.
Stepping macros now properly aborts N levels (upon error or ⊗#⊗XABORT
command) BEFORE finishing the stepping. Makes macro stepping work on fancy
macros.
The arrow line number at the bottom is now properly updated after a ⊗*
command, and the screen erasing is now done correctly upon ⊗XBOTSET.
The ⊗XNDBBOARD command has really been fixed this time to update the
display of the old first line on a DM if ∂ became >.
∂29 Jan 79 -- Minor fixes.
The ⊗XNDFAIL command now recognizes symbols up to 20 chars in length, but
symbols can contain only: letters, digits, and any of ".%_$".
Bug fix to handling of the characters ≤ and ≥ in justification.
Bug fix to <vt> in attach mode to correctly position attach buffer at
bottom of screen.
The ⊗0⊗J command in attach mode centers among non-attached text on screen.
∂5 Jan 79 -- Attempt to minimize frequency of display lossage on DDs.
To reduce the frequency of half-field DD display trouble, a slight
compromise was needed for DD displaying. Namely, if a line has 9 or 10
tabs in the first 80 columns, then the characters in columns 81 to 84 may
not get displayed by E (they will of course appear in the line editor, as
do characters beyond column 84). In particular, with 9 tabs in the first
80 columns, characters in columns 83 and 84 will not be displayed, and
with 10 tabs in the first 80 columns, characters in columns 81 through 84
will not be displayed. This change seems to have cut the frequency of DD
display trouble by a factor of 10 (a system mod has lessened the problem
further still).
∂4 Jan 79 -- Fix to ⊗/ command when given in insert mode for top window line.
∂1 Jan 79 -- Three minor fixes.
Bug fix to ⊗XTJxxx and ⊗XTABLE commands to avoid screwing up when
in attach mode.
Bug fix to ⊗XNDBBOARD command on DMs to properly update display of
old first line if "∂" changed to ">".
Good extension .MFT changed to .MF for Metafont.
∂11 Dec 78 -- Fix to avoid runaway detached E jobs.
∂7 Dec 78 -- New improved vertical movement commands: α; αβ; α: αβ:
The four vertical movement commands α; αβ; α: αβ: have been slightly
changed to improve their usefulness. It is now possible to move up and
down with these commands, passing through short (or empty) lines and
through tabs without losing your "column of interest". The double-bucky
commands αβ; and αβ: now set the "column of interest" to the column where
the command is given (if you are in the line editor). These double-bucky
commands then move to the new line and try to position you to the new
column of interest. The CONTROL-only commands α; and α: merely move
you to the new line and position you at the old (and unchanged) column of
interest. Thus, when you are moving up or down on a page, you should use
the αβ; or αβ: version THE FIRST TIME, in order to set the column of
interest, and thereafter use only the α; and a: commands, until you want
to change your column of interest. Note: The αβ; and αβ: commands do
not set a new column of interest except when given from within the line
editor.
The current "column of interest" for the ⊗; and ⊗: commands can be
accessed in the Readonly Variable "COLINT.".
Also, ⊗XPOINTER recognizes filenames preceded by "@".
∂1 Dec 78 -- Minor fix to macro stepping routines.
∂27 Nov 78 -- ⊗XSET can copy whole macros.
The command ⊗XSET <macro1>←<macro2> now copies the whole of <macro2>'s
definition into the new defintion of <macro1> (formerly this only copied
the numeric value of the second macro into the first). Also, the second
macro name can now be blank (e.g., ⊗XSET MAC←<cr>); thus even the
definition of the blank-named macro can be copied (in case you forgot to
enter a non-blank name when you defined the macro).
Also, the extension .TFX has been added to E's list of bad filename
extensions, and .TFD has been added to E's good extension list.
∂22 Nov 78 -- Nine new single character macro calling cmds (top digits).
The nine new single-character commands ⊗≡ ⊗∩ ⊗∪ ⊗⊂ ⊗⊃ ⊗$ ⊗% ⊗~ ⊗_ (all
found on the top of the digit keys on SU-AI keyboards) can now be defined
as macros. The names of these macros (for use in macro-handling commands
like ⊗XDEFINE <macro name>) are the same as the command names (less the
CONTROL/META bits). Thus, ⊗XDEFINE $<cr> lets you define the ⊗$ command
as a macro, and ⊗Z$<cr> executes the $ macro just like the ⊗$ command
does. Of course, ⊗0⊗$ will type out the definition of the $ macro (if
any), and ⊗#⊗$ will call the $ macro with a repeat arg of #.
There is one special feature of these special single-character macros:
namely, the ⊗Y command will NEVER execute any of these macros, since
each of them has its own single-character command. That is, defining
(or calling with the ⊗Z command) any of these macros does not change
the default macro that ⊗Y will execute (as would be the case for a
normal macro definition or call from the top level).
∂19 Nov 78 -- ⊗XRAPID mode bug fixed and ⊗0⊗XRAPID now reports mode.
A bug in the line editor simulator (⊗XRAPID mode) has been fixed. The
bug occurred (and was usually fatal) when a macro generated a line editor
activator when the cursor pointed to a tab in the (simulated) line
editor. Very soon now, ⊗XRAPID mode will become the default.
Also, ⊗0⊗XRAPID now reports whether the line editor simulator (for
macros) is enabled (⊗XRAPID mode) or disabled (⊗-⊗XRAPID mode).
Finally, the ⊗XWRITTEN command now works even right after you have
reformatted a file (w/ or w/o a directory).
∂17 Nov 78 -- ⊗XNDBBOARD command for updating directory line in \BBOARD file.
The new command ⊗XNDBBOARD (New Directory-line for \BBOARD) generates a
new directory line for the current page from the old directory line,
assuming it is in the MAIL message header format or the ⊗XNDBBOARD
format. These two formats are distinguished by whether the first space
in the line is followed by a second space. If so, then is MAIL format
and this command flushes the original time from the header and inserts
the current date and the current user's programmer name after the
original programmer name. If the old directory line was already in
⊗XNDBBOARD format, then the update date is replaced by the current date
and the updating programmer name is replaced with the current user's
programmer name. No guarantees are made about what this command will do
with a page whose first line is in any other format. Note that this
command does not delete the old header line (the user should do that
himself), but it does replace any initial partial-sign (∂) in that line
with a greater-than sign (>) to make sure the ⊗∂ command will still work
on the whole message.
Also, .MFT (METAFONT) has been added to E's list of good extensions.
∂15 Nov 78 -- E now handles pages with more than 2↑18 chars.
The page size limit is now about 2↑27 characters, but the core size
limit of 256P for the lower segment is the real limiting factor.
∂10 Nov 78 -- Leading empty lines omitted in text given to MAIL.
The ⊗XMAIL, ⊗XSEND and ⊗XREMIND commands now omit any leading empty lines
in the range of lines being given to the MAIL program. This allows you
to, for instance, enter a one paragraph message at the end of a page
(preceded by a empty line) and then, while pointing anywhere within the
paragraph (including the end of the page), mail the paragraph with
α!⊗XMAIL, which will conveniently ignore the empty line that starts the
paragraph (as defined by the α! command).
∂2 Nov 78 -- Two minor bug fixes.
⊗∂<plain char> now works again.
⊗XCHARACTER and ⊗XBREAK now evaluate numeric macros and readonly
variables properly.
∂ *** A HISTORY OF OLDER E CHANGES IS CONTAINED IN: E.UPD[UP,DOC] ***
All information in E.UPD has been merged into this manual.
INDEX of commands.
Read α as CONTROL, β as META, and ⊗ as either CONTROL or both CONTROL and META.
Modes: N=Normal, E=line-Edit, A=Attach
I=command explicitly affects LINE INSERT mode
L=command is a Line editor command,
S=command takes arg from Search distance.
# stands for any decimal number.
Note that when a repeat argument is given from the line editor, the
form αβ# must be used instead of α#, since the latter would be taken
as a line editor repeat count instead of an E-command repeat arg.
Page Modes Command Meaning
7 N,A <form> Go forward one window among incore text
7 N,A ⊗0<form> Go forward a half window among incore text
7 N,A ⊗#<form> Go forward # windows among incore text
7 N,A ⊗<form> Go forward one window, changing pages if necessary
9 E,L α<form> Move cursor to beginning of line
6 N β<form> Insert an incore pagemark
7 N,A <vt> Go back one window among incore text
7 N,A ⊗0<vt> Go back a half window among incore text
7 N,A ⊗#<vt> Go back # windows among incore text
7 N,A ⊗<vt> Go back a window, changing pages if necessary
7 N,A β<vt> Go back a window, changing pages if necessary
7 N,A <cr> Move arrow to next line
9 E <cr> Close line and move arrow to next line
9 E α<cr> Leave LINE-EDIT mode, stay on same line
11 I α<cr> Leave LINE INSERT mode, stay on same line
13 N α<cr> Position cursor at found string (after find)
9 N β<cr> Insert <cr>
9 E β<cr> Close line and insert <cr>
9 I β<cr> Insert <cr> but don't leave LINE INSERT mode
11 N,I αβ<cr> Enter LINE INSERT mode and insert a blank line
11 E,I αβ<cr> Enter LINE INSERT mode breaking current line at cursor
11 N,E ⊗#αβ<cr> Insert # blank lines
7 N,A <bs> Move arrow up a line
9 E,L <bs> Move cursor left a char, deleting if at end of line
9 E,L α<bs> Move cursor to left (never deleting char)
7 N,A β<bs> Move arrow up a line
9 E,L β<bs> Delete char to left
7 N,A ⊗<bs> Move arrow up a line (see also ⊗U cmd)
9 E,L αβ<bs> Repeatedly move cursor to left (as long as held down)
9 N,E,L α<tab> Go to end of current line
11 N,E,I αβ<tab> Go to end of current line and enter line insert mode
N,A <alt> Abort command
9 E <alt> Restore line to original condition
11 I <alt> Close line, leave LINE INSERT mode, delete line if empty
13 <ESC>I Terminate multi-page FIND
14 <ESC>I Terminate multiple substitution
25 <ESC>I Terminate macro expansion
7 <ESC>I Terminate wait on delayed ⊗V command
10 N,A,E,S ⊗A Attach 1 line
10 N,A,E,S ⊗#⊗A Attach # lines
10 N,A,E ⊗+⊗A Attach 1 more line
10 A ⊗-⊗A Attach 1 less line
10 N,E ⊗-⊗A Attach line just above current line
7 N,A ⊗B Glitch screen up from Bottom
7 E αβB Glitch screen up from Bottom
9 E,L αB Move backwards in line editor to next char typed
10 N,A,E,S ⊗#⊗C Copy # lines into attach buffer
10 N,E ⊗-⊗C Copy line just above current line
10 A ⊗+⊗C Copy one more line
10 A ⊗-⊗C Copy one less line (i.e., kill last line in attach buffer)
9 E,L αD Delete char (if at end of line, delete CRLF)
7 N,S αβD Delete line
7 N,S ⊗#αβD Delete # lines
7 N,S ⊗-αβD Delete previous line
7 N,S ⊗-⊗#αβD Delete # previous lines
7 N ⊗E Exit
10 A ⊗E Leave ATTACH mode by putting down all attached lines
13 N,A,E αF Find string (delimiters not required)
13 N,A,E αβF Find delimited string
⊗G Unused
34 N,A αH Go to previous file in file stack (Home)
34 N,A αβH Go to Nth previous file, where N is current default arg
34 N,A ⊗0αH Type out file stack
34 N,A ⊗0αβH Type out default arg for αβH command
34 N,A ⊗#αH Go to #th previous file
34 N,A ⊗#αβH Go to #th previous file and set default arg to #
34 N,A ⊗-⊗#⊗H Go to #th previous file and pop # files off top of stack
34 N,A ⊗+⊗#⊗H Re-push # files back onto top of stack and go to new top
9 N,E,L αI Enter Insert mode (at end of line, enter LINE INSERT mode)
11 N,I αβI Enter LINE INSERT mode and insert a blank line
11 E,I αβI Enter LINE INSERT mode in current line (new line if at end)
7 N,A,E ⊗J Jump the arrow line to the top of the screen
7 N ⊗-⊗J Jump the arrow line to the bottom of the screen
7 N,A,E ⊗0⊗J Jump the arrow line to the center of the screen
7 N ⊗#⊗J Jump the arrow line up # lines
7 N ⊗-⊗#⊗J Jump the arrow line down # lines
9 N,E,L αK Kill characters forward up to next char typed
10 A αβK Kill all attached lines
10 A ⊗#αβK Kill # lines at front of attach buffer
9 E,L αL Kill characters backward up to next char typed
7 N,A αL Go to first line of current page
7 N,A,E αβL Go to first line of incore text
7 N,A,E ⊗#αL Go to Line # of current page
7 N,A,E ⊗#αβL Go to Line # of all incore text
8 N,A αM Go forward to next Mark
8 N,A ⊗-αM Go backward to previous Mark
8 N,A ⊗#αM Go forward # Marks
8 N,A ⊗-⊗#αM Go backward # Marks
8 N,A αβM Place a Mark on current line
8 N,A ⊗-αβM Clear Mark on current line
8 N,A ⊗0⊗M Report the number of Marks in current file
34 N,A αN Go to previous line in line stack
34 N,A αβN Go to Nth previous line, where N is current default arg
34 N,A ⊗0αN Type out line stack
34 N,A ⊗0αβN Type out default arg for αβN command
34 N,A ⊗#αN Go to #th previous line
34 N,A ⊗#αβN Go to #th previous line and set default arg to #
34 N,A ⊗-⊗#⊗N Go to #th previous line and pop # lines off top of stack
34 N,A ⊗+⊗#⊗N Re-push # lines back onto top of stack and go to new top
34 N,A αO Go to previous page in page stack
34 N,A αβO Go to Nth previous page, where N is current default arg
34 N,A ⊗0αO Type out page stack
34 N,A ⊗0αβO Type out default arg for αβO command
34 N,A ⊗#αO Go to #th previous page
34 N,A ⊗#αβO Go to #th previous page and set default arg to #
34 N,A ⊗-⊗#⊗O Go to #th previous page and pop # pages off top of stack
34 N,A ⊗+⊗#⊗O Re-push # pages back onto top of stack and go to new top
6 N,A αP Go to next Page
6 N,A αβP Go to next Page that is not in core
6 N,A ⊗-αP Go to previous Page
6 N,A ⊗-αβP Go to previous Page that is not in core
6 N,A ⊗#αP Go to Page #
6 N,A ⊗#αβP Go to Page #, retaining only it in core
9 N,E ⊗Q Copy line above, and enter copy in line-edit mode
9 N,E,L αR Repeat line editor αS or αK or αB or αL cmd
10 A αβR Replace attached lines (put them back where picked up)
9 N,E,L αS Skip to next char typed
34 N,E αβS Re-edit the last line edited, at column were activated it
7 N,A ⊗T Glitch screen down from Top
7 E αβT Glitch screen down from Top
9 E,L αT Transpose the previous two chars in the line editor
7 N,A,E ⊗U Move arrow Up a line (recommended cmd for non-displays)
7 N,A,E αV Redraw screen (without clearing)
7 N,A,E αβV Clear and then redraw screen
7 N,A,E ⊗#⊗V Redraw screen and then wait # seconds; ESC I ends wait
7 N,A,E ⊗W Go forward one window among incore text
7 N,A,E ⊗0⊗W Go forward a half window among incore text
7 N,A,E ⊗#⊗W Go forward # windows among incore text
19 N,A,E ⊗X Enter eXtended command next
19 N,A,E ⊗Xα<cr> Load line editor with previous extended cmd line to retry
25 N,A,E ⊗Y Call current macro
25 N,A,E ⊗Z Call a named macro
25 N,A,E ⊗# (Actually the "#" char) Pass macro call arg to next cmd
28 N,A,E ⊗& Step macro execution # steps
25 N,A,E ⊗≡ Call the macro named "≡"
25 N,A,E ⊗∩ Call the macro named "∩"
25 N,A,E ⊗∪ Call the macro named "∪"
25 N,A,E ⊗⊂ Call the macro named "⊂"
25 N,A,E ⊗⊃ Call the macro named "⊃"
25 N,A,E ⊗$ Call the macro named "$"
25 N,A,E ⊗% Call the macro named "%"
25 N,A,E ⊗~ Call the macro named "~"
25 N,A,E ⊗_ Call the macro named "_"
24 N,A,E ⊗∂ Operate on message with next cmd
24 N,A,E ⊗! Operate on paragraph with next cmd
15 N,A ⊗ε Switch to given file in READWRITE mode
15 N,A ⊗λ Switch to given file in READONLY mode
15 N,A,E ⊗∃ Show names of files in fileswitch list
13 N,A,E ⊗* Repeat last ⊗F or ⊗XFIND command
14 N,E ⊗\ Repeat last substitution command
7 N,A α. Write out current page (not including attach buffer)
7 N,A,E αβ. Write out current page (including current line editor)
15 N,A ⊗? Switch to the file E.ALS[UP,DOC]/R
15 N,A ⊗#⊗? Go to page # in E.ALS
15 N,A ⊗+⊗#⊗? Go to E.ALS, # pages beyond where last left it
15 N,A ⊗-⊗#⊗? Go to E.ALS, # pages before where last left it
9 N,E αβ; Set col of interest to current col and move straight up
9 N,E α; Move up to next line at old column of interest
9 N,E αβ: Set col of interest to current col and move straight down
9 N,E α: Move down to next line at old column of interest
22 N,E ⊗( Find (
22 N,E ⊗) Find matching )
22 N,E ⊗↔ Return to place ⊗(, ⊗) or ⊗↔ was given
36 N,E α/ Lisp-indent current line by context above it
36 N,E αβ/ Lisp-indent next line by context above it
36 N,E ⊗#α/ Lisp-indent # lines from arrow by context above
36 N,E ⊗#αβ/ Lisp-indent # lines from next by context above
36 A α/ Lisp-indent first attached line (no-op!)
36 A αβ/ Lisp-indent first attached line in context of page
36 A ⊗#α/ Lisp-indent first # attached lines
36 A ⊗#αβ/ Lisp-indent first # attached lines in context of page
9 N,E α↑ Move to end of line above
11 N,E,I αβ↑ Move to end of line above and enter line insert mode
9 N,E α↓ Move to end of line below
11 N,E,I αβ↓ Move to end of line below and enter line insert mode
18 N,A,S ⊗← Shift line or attach buffer left by current indent default
18 N,A,S ⊗#⊗← Shift # lines left by current indent default
18 N,A,S ⊗→ Shift line or attach buffer right by current indent default
18 N,A,S ⊗#⊗→ Shift # lines right by current indent default
7 N,A,E ⊗> Move arrow down 4 lines
7 N,A,E ⊗< Move arrow up 4 lines
7 N,A,E ⊗≥ Move arrow down half a screen
7 N,A,E ⊗≤ Move arrow up half a screen
7 N,A,E ⊗∧ Move arrow to top of screen
7 N,A,E ⊗0⊗∧ Move arrow to middle of screen
7 N,A,E ⊗∨ Move arrow to bottom of screen
7 N,A,E ⊗0⊗∨ Move arrow to middle of screen
Page Modes ⊗X Command Meaning
25 N,A,E ABORT Abort one or more macros levels in progress
26 N,A,E ADD Add given repeat arg to macro's value
19 N,A AL Change your job's ALIAS
19 N,A ALIAS Change your job's ALIAS
18 N,A,S ALIGN Align left margins of text
6 N APPEND Add # following pages to incore text
26 N,A,E ARGUMENT Set up repeat argument from value of numeric macro
27 N ATTACH Place an editable macro definition in the attach buffer
33 N,A,E ATTSET Set max number of lines used to display attach buffer
19 N,A,E AUTOBURP Set or read autoburping threshold
28 N,A,E AUTOSTEP Set or read autostepping time for macros
11 N,A,E,I AUTOWRITE Set or read autowriting threshold for line insert mode
34 N,A BACKGO Go back to page that you last came from (see ⊗O cmd)
19 N,A,E BEEPME Beep the user's terminal now
19 N,A BLOAT Add extra records of nulls to current page
33 N,A BOTSET Set number of lines used at bottom for page printer
12 N,A,S BREAK Break line(s) at given column position
19 N,A BURP Burp current page of extraneous records of nulls
6 N,A,E CA Flush unwritten changes to incore page(s)
6 N,A,E CANCEL Flush unwritten changes to incore page(s)
25 N,A,E CASE Select and call a macro from a list of macro names
18 N,A,S CENTER Center text of given lines between margins
26 N,A,E CHARACTER Generate the next command character from numeric value
19 N,A,E CHECK Enable free storage checking within E
19 N,A CLOSE Close the file, but allow further editing
27 N,A,E COMMENT No-op, useful for putting comments in command files
21 N,A,E CONTROL Make next cmd char have only the CONTROL bit
19 N,A CORCHK Try to core down if possible (done automatically)
19 N,A,E DDTGO Call RAID, if available (ERAID only)
25 N,A DEFINE Define a macro
6 N DELETE Delete the next (not-incore) pagemark
19 N,A,E DFIND Run FIND program on another job to do file search
23 N DIRED Swap to the DIRED directory editor
26 N,A,E DIVIDE Divide macro's numeric value by given repeat arg
19 N,A DPYALWAYS Update the display after every command
19 N,A DPYSKIP Only update the display when no typeahead
7 N,A,E DRAW Redraw the screen now
23 N DRD Swap to the DIRED directory editor
19 N,A,E ECHO Turn on/off echoing of text edited in line editor
19 N,A,E EMPTY Move to next empty line on page
21 N,A ENTER Switch to given file in READWRITE mode
21 N,A EPSILON Switch to given file in READWRITE mode
13 N,A,E EXACT Distinguish case of letters in searches
27 N,A,E EXECUTE Read and execute commands from a file
21 N,A,E EXIST Type out fileswitch list
13 N,A,E FIND Do a multipage search for a given string
23 N GORPG Swap to SNAIL (RPG) to reexecute last cmd
21 N,A HEADER Type out the header line (from top of window)
33 N,A HEIGHT Set the number of lines used for text display
34 N,A HOME Go to relative or absolute page in Home file
26 N,A,E IFEQ Error unless repeat arg = macro value
26 N,A,E IFGE Error unless repeat arg ≥ macro value
26 N,A,E IFGT Error unless repeat arg > macro value
26 N,A,E IFLE Error unless repeat arg ≤ macro value
26 N,A,E IFLT Error unless repeat arg < macro value
26 N,A,E IFNE Error unless repeat arg ≠ macro value
18 N,A,S INDENT Indent lines by given amount
6 N INSERT Insert an incore pagemark before current line
16 N,A,S JFILL Justify paragraphs w/out aligning right margin
16 N,A,S JGET Get justification margins from text
12 N,A,S JOIN Join two or more lines by deleting CRLFs
16 N,A,S JUST Justify paragraphs and align at right margin
21 N,A LAMBDA Switch to given file in READONLY mode
19 N,A LINCNT Type length of current line, plus more info
36 N,A,E LISPSYNTAX Examine and/or modify char interpretation by ⊗/ cmd
21 N,A LOOKUP Switch to given file in READONLY mode
22 N,E LPAREN Search for next "(", crossing page boundaries
6 N,A M Make the current line start a new page
19 N,A,S MAIL Mail a message to someone
6 N,A MARK Make the current line start a new page
26 N,A,E MAXIMUM Set macro's value to MAX(<old value>,<repeat arg>)
21 N,A,E METACONTROL Make next cmd char have both META and CONTROL bits
26 N,A,E MINIMUM Set macro's value to MIN(<old value>,<repeat arg>)
21 N,A,E MSG Operate on current message with next command
26 N,A,E MULTIPLY Multiply macro's numeric value by given repeat arg
32 N NDBBOARD Make a New Directory line for a page in \BBOARD
32 N NDFAIL Make a New Directory line (FAIL type) for page
32 N NDSAIL Make a New Directory line (SAIL type) for page
19 N,A,E NONEMPTY Move to next non-empty line on page
21 N,A,E NUMBERS Enable or disable typing of line numbers with text
19 N,A OPEN Open the current file in Read-Alter mode
22 N,A,E PAREN Set the chars searched for by parenthesis cmds
21 N,A,E PARTIAL Operate on current message with next command
22 N,A,E PINFO Type out info about last parenthesis command
15 N,A POINTER Switch to a file named in the incore text
19 N,A PPSET Ensure that the page printer is positioned ok
19 N,A PROTECTION Set or read the protection key of the file
27 N,A,E PUTDEFS Append all current macro definitions to a cmd file
19 N,A,E QUIT Exit to monitor without writing out the file
25 N,A,E RAPID Enable line editor simulator for use in macros
19 N,A READONLY Disallow changing the file
19 N,A READWRITE Allow changing the file
27 N,A REDEFINE Define a macro from incore page or attach buffer
26 N,A,E REMAINDER Set macro to remainder of <old value> / <repeat arg>
19 N,A,S REMIND Enter a REMIND-system reminder
25 N,A,E RESUME Resume expansion of a macro that was stopped early
22 N,E RPAREN Search for next ")", crossing page boundaries
23 N,A,E RSYS Run a given system program, with RPG startup
23 N,A,E RUN Run a given user program, with RPG startup
19 N,A SAVE Write out incore page(s) in E$SAVE.TXT
28 N,A,E SAY Type out text and/or decimal number
19 N,A,S SEND Send a message to someone logged in
26 N,A,E,S SET Set the value of a numeric macro
25 N,A,E SILENT Suppress error messages while inside macros
19 N,A,S SIN Replace tabs with equivalent numbers of spaces
16 N,A,S SJFILL Separate text into justified sentences
16 N,A,S SJUST Separate into justified right-aligned sentences
19 N,A,S SPOOLC Spool incore page(s) on the line printer
13 N,A,E SSLINE Set or report the search limiting line number
13 N,A,E SSPAGE Set or report the search limiting page number
28 N,A,E STEP Step macro execution # steps
25 N,A,E STOPALL Set action on macro error to stop all macros
25 N,A,E STOPHOW Find out setting of macro error action
25 N,A,E STOPONE Set action on macro error to stop just one macro
25 N,A,E STOPZERO Set action on macro error to ignore errors
26 N,A,E SUBTRACT Subtract given repeat arg from macro's value
17 N,A,S TABLE Line up entries in a table
19 N,A,E TELLME Report the latest commands to person maintaining E
19 N,A,E TERSE Enter terse mode--suppresses some typed info
17 N,A,S TGET Same as TJGET command (see below)
6 N,A THISPAGE Write out incore page(s) and read back only current page
19 N,A,S TIN Replace multiple spaces with equivalent tabs
17 N,A,S TJFILL Justify paragraphs that begin with a table
17 N,A,S TJGET Get margins for TJFILL/TJUST from text
17 N,A,S TJUST Justify & R-align paragraphs beginning w/table
19 N,A,E TMPCOR Write out (now and on exit) TMPCOR file used by E
33 N,A TOPSET Set number of lines E skips at top (e.g., for wholine)
21 N,A TRAILER Type out the trailer line (from bottom of window)
21 N,A,S TYPE Type out line(s) of text
35 N,A UNDELETE Restore recently deleted or changed text
30 N,A UPDATE Write out the updated incore directory
19 N,A,E VERBOSE Enter verbose mode--types out extra info
19 N,A,E WRITTEN Type out who previous wrote the file and when
19 N,A,S XSPOOL Spool incore page(s) on the XGP
34 N,A ZFILES Zero (clear) the file stack (and filelist)
34 N,A ZLINES Zero (clear) the line stack
8 N,A ZMARKS Zero (clear) all line marks
34 N,A ZPAGES Zero (clear) the page stack
Abbreviations and explanation of E documentation. Credits.
This version of the E manual is intended for on-line use by the normal
user. It may be referenced at any time while editing another file
simply by typing a <CONTROL>? command. One may always return to one's
original file by typing the <CONTROL>H command.
A simplified form of this manual for the beginner is available by
typing HELP ETEACH with a carriage return to the system. This copies a
file named TEACH into one's file area and allows one to read it and
modify it for practice.
This is p. 4 of E.ALS[UP,DOC] (see the top line with asterisks).
Page 1, the "directory" page, is automatically prepared by E, and in
this case has been planned to be of maximum help to the user. There is
also an Index of Commands on p. 3.
ABBREVIATIONS used in this manual and in TEACH to characterize commands.
α means hold the "CONTROL" key down while typing a character.
β means hold the "META" key down while typing a character.
αβ means hold both "CONTROL" and "META" keys down while typing.
⊗ means use either α or αβ with the next character.
Most commands are single characters with one or both of the two keys.
Additional abbreviations
<cr> carriage RETURN key. <lf> LINE feed key.
<tab> TAB key. <alt> ALT-mode key.
<bs> Back-Space key. <form> FORM-feed key.
<vt> the VT key. <clear> the CLEAR key.
CURRENT means the current line (normally with an → or ↔ on the left).
Credits.
Dan Swinehart wrote TV, the original version of the display editor,
and created the original version of TEACH. Fred Wright wrote the FAIL
version of TV (called E). Brian Harvey modified TEACH to reflect
differences between E and TV. Arthur Samuel and Brian Harvey are
responsible for this version. Address all comments and questions to
Samuel, who is currently trying to fix the remaining bugs in E.
Disclaimer.
An attempt has been made to present a coordinated view of E. To this
end some simplications have been made. The experienced user may develop
techniques that are not described in this manual. Any outright errors
should, however, be called to our attention.
General remarks.
E is a fast display-oriented text editor for disk files. By using
random access to individual pages, E can move around quickly within a
file without having to be continually recopying the file; and only those
pages whose texts are changed are ever written out to the disk. E keeps
one or more contiguous pages in core and, on display terminals, shows to
the user a portion of this text as if through a window, thus showing
lines of text in context rather than isolated. Various commands are
available for moving the window from place to place in the file and for
moving around within the window. (Normally only one page is kept in
core, but the user can cause several contiguous pages to be kept in core
to provide even faster movement among those pages.) On displays, a line
pointer (arrow) and an underscoring cursor are used to mark the position
in the text where editing is to occur. On non-display terminals, text
is typed out instead of displayed.
Note: On Datamedia terminals (DMs), no arrow is used to indicate the
current line. Instead, the terminal's cursor is left under the first
character of the current line.
The window of text on a display screen is bordered above and below
by lines consisting mainly of asterisks or dots but which also include
information about the editing. A top or bottom border will be mostly
ASTERISKS when the last text line in that direction is visible
ON-SCREEN, and the border line will be mostly DOTS when there is more
text OFF-SCREEN in that direction.
The border line at the top is called the header line, and the border
line at the bottom is called the trailer line. The information on the
header line includes:
(1) the number of the text line just below the header,
(2) the number(s) of the incore page(s),
(3) the name of the file, and
(4) the editing modes.
The trailer line reports:
(1) the number of the current line,
(2) the total number of lines on the current page,
(3) the number of the current page,
(4) the total number of pages in the file, and
(5) some information about the size of the page(s) in core.
This last item tells the page's size with respect to the number of
records that it currently occupies on the disk. The amount of room the
page currently uses on the disk is given in records followed by the
letter "R". Following this is a number that shows how much spare room
there is for this page on the disk or how much extra room the page needs
in order to write it out to the disk. The amount of spare room or extra
room needed is reported in characters and is followed by the letter "C"
provided the number is 640 characters or less. In this case, a negative
number means there is that much room to spare and a positive number
means that much extra room is needed. If the amount of spare or extra
room is more than 640 characters, it will be reported in records (640
characters/record) and will be followed either by the letter "B" (for
Bloated) if there is room to spare or by the letter "X" (for eXpand) if
more room is needed.
If the file is not formatted, only a "?R" will appear where normally
the R and C/B/X fields appear.
Extra records indicated by a "B" on the trailer line will never be
removed automatically, although they can be removed by the ⊗XBURP
command.
E does not make a separate disk copy of the file being edited unless
that is requested by the use of a special command (described later), so
take care--when you write out a page, the former contents of that page
are lost.
Basic editing in E (on displays) utilizes the system line editor for
editing a single line at a time. E loads text from the current version
of a text line into the display's line editor and then lets you edit it
with the usual system line editor commands. When you are done with the
line, you type <cr> (or some other command) to give the edited text back
to E.
E achieves its speed (1) by using the system's line-editor and only
changing the core copy of the text on the completion of a line edit, and
(2) by updating the disk copy of the page only on the completion of a
page edit (automatically effected by moving to another page). You can
undo an entire page of incorrectly made modifications by cancelling an
update, but unfortunately, you can also lose an entire page of desired
modifications or additions if the system should go down unexpectedly.
E is best understood by recognizing that it operates in a few
different modes and that many commands are appropriate only to certain
modes. In fact, a couple of commands have quite different effects
depending upon the mode that E is in at the time when the command is
given.
The dominant mode is the NORMAL mode. This allows for page, window
and line pointer movement commands and commands which enter the other
modes.
ATTEMPT TO MINIMIZE FREQUENCY OF DISPLAY LOSSAGE ON Data Disc TERMINALS
To reduce the frequency of half-field display trouble on Data Disc (DD)
terminals, a slight compromise was needed for DD displaying. Namely, if a
line has 9 or 10 tabs in the first 80 columns, then the characters in
columns 81 to 84 may not get displayed by E (they will of course appear in
the line editor, as do characters beyond column 84). In particular, with
9 tabs in the first 80 columns, characters in columns 83 and 84 will not
be displayed, and with 10 tabs in the first 80 columns, characters in
columns 81 through 84 will not be displayed. This change seems to have
cut the frequency of DD display trouble by a factor of 10 (a system mod
has lessened the problem further still), but DON'T BE SURPRISED BY E'S
FAILURE TO DISPLAY CHARACTERS THAT ARE IN COLUMNS 81 to 84 on text
lines with lots of tabs; the characters are still there and they will
appear in the line editor if you edit such a given line.
PAGE CHANGING, APPENDING, DIVIDING, COMBINING, CANCELLING: ⊗XAPPEND ⊗XTHISPAGE β<ff> ⊗XMARK ⊗XDELETE ⊗XCANCEL
Modes Command Meaning
N β<form> Insert an incore pagemark
N,A αP Go to next Page
N,A αβP Go to next Page that is not in core
N,A ⊗-αP Go to previous Page
N,A ⊗-αβP Go to previous Page that is not in core
N,A ⊗#αP Go to Page #
N,A ⊗#αβP Go to Page #, retaining only it in core
N APPEND Add # following pages to incore text
N,A,E CA Flush unwritten changes to incore page(s)
N,A,E CANCEL Flush unwritten changes to incore page(s)
N DELETE Delete the next (not-incore) pagemark
N INSERT Insert an incore pagemark before current line
N,A M Make the current line start a new page
N,A MARK Make the current line start a new page
N,A THISPAGE Write out incore page(s) and read back only current page
PAGE CHANGING commands.
PAGE-CHANGING commands are single characters typed with the CONTROL key
held down or with both the CONTROL and the META keys held down. They may
take modifiers as shown below. Note: if you have more than one page in
core, then there is a slight difference between the commands αP and αβP.
αP Go to the next Page.
αβP Go to the next Page that is not already in core.
⊗7αP Go to page 7.
⊗7αβP Go to page 7, retaining only it in core.
⊗+⊗4αP Go forward 4 pages.
⊗+⊗4αβP Go forward 4 pages from the last page in core.
⊗-αP Back up to the previous page.
⊗-αβP Back up to the previous page that is not already in core.
⊗-⊗3αP Back up 3 pages.
⊗-⊗3⊗P Back up 3 pages from the first page in core.
It is good practice to limit the page size to less than 150 lines.
This eases the load on the editor and makes the directory of more use.
The directory will be much more useful if you also make it a practice to
start each page with a suitable comment, in the case of code perhaps
containing a list of all labels to be found on the page. You can than
use a special directory search procedure (explained on p. 13) to expedite
the location of any desired item that is so listed.
PAGE APPENDING and UNAPPENDING commands.
It is possible to have more than one page in core at the same time. This
technique makes it possible for two pages to be edited together at the
same time while retaining all of advantages of short pages, as noted above.
To do this one makes use of the ⊗XAPPEND command.
⊗#⊗XAPPEND Read in # additional pages after the current one(s) so
that two or more contiguous pages may be edited together.
If no arg (#) is given, one additional page is read in.
This command is not legal from the directory page or in
an unformatted file. The arrow may be moved up and down
freely on the combined incore pages and the αP command
(with an argument if desired) may be used to switch
between the incore pages, without affecting the APPEND
status. αβP commands will, however, write out all incore
pages and read in only the one specified. The ⊗XCANCEL
command (below) cancels all corrections on all of the
incore pages and reads in the previous version of the
first incore page.
⊗XTHISPAGE This command is useful for going from multipage mode (two
or more pages in core, from having done an ⊗XAPPEND or a
β<ff>) to single page mode (one page in core). This
command writes out the incore text and then reads in only
the page where the arrow is. The position of the arrow
and (when possible) the window are preserved. However,
the line stack is currently cleared.
PAGE DIVIDING commands
A page may be split into two pages in either of two ways, one way
leaving only the newly created page in core and the second way leaving
both pages in core together.
⊗XMARK
or
⊗XM Split the current page into two pages with the arrow line
as the first line of a new page. Write out the incore
pages and retain in core only the page containing the
arrow line.
If this command is given when there is some text attached,
the attached lines are first put down and then the page is
divided in two and written out. The division occurs at
the beginning of the formerly-attached lines unless those
lines are already at the top of a page, in which case the
division occurs after the formerly-attached lines. The
arrow is left at the top of the formerly-attached lines,
whose page is the only one retained in core.
β<form> Split the current page into two pages with the arrow line
as the first line of the newly created page and retain
both pages in core without writing out anything.
⊗XINSERT Exactly the same as β<form>.
PAGE COMBINING commands
Two pages may be combined into one page in either of two ways.
⊗XDELETE<cr> Delete the pagemark at the end of the last incore page
and add the text that was formerly on the next page to
the present in-core page, writing out the resultant page.
To delete a page mark that divides two pages that are already in core
togather, one moves the arrow to the on-screen representation of the
page mark separating the two pages and gives the following command.
αβD When this command is given with the arrow pointing to an
on-screen page mark, the page mark is deleted and the two
adjoining pages are combined into one page. Thus, this
command will delete either regular text lines or pagemark
lines (without writing out any pages).
PAGE RESTORING command
⊗XCANCEL Do not write out the current page but instead reread it in
or from the disk. If several pages are in core, only the
⊗XCA first of those is reread from the disk. See p. 8 for the
effect ⊗XCANCEL has on line marks.
WINDOW and ARROW moving commands.
Modes Command Meaning
N,A <form> Go forward one window among incore text
N,A ⊗0<form> Go forward a half window among incore text
N,A ⊗#<form> Go forward # windows among incore text
N,A ⊗<form> Go forward one window, changing pages if necessary
N,A <vt> Go back one window among incore text
N,A ⊗0<vt> Go back a half window among incore text
N,A ⊗#<vt> Go back # windows among incore text
N,A ⊗<vt> Go back a window, changing pages if necessary
N,A β<vt> Go back a window, changing pages if necessary
N,A <cr> Move arrow to next line
N,A <bs> Move arrow up a line
N,A β<bs> Move arrow up a line
N,A ⊗<bs> Move arrow up a line (see also ⊗U cmd)
<ESC>I Terminate wait on delayed ⊗V command
N,A ⊗B Glitch screen up from Bottom
E αβB Glitch screen up from Bottom
N,S αβD Delete line
N,S ⊗#αβD Delete # lines
N,S ⊗-αβD Delete previous line
N,S ⊗-⊗#αβD Delete # previous lines
N ⊗E Exit
N,A,E ⊗J Jump the arrow line to the top of the screen
N ⊗-⊗J Jump the arrow line to the bottom of the screen
N,A,E ⊗0⊗J Jump the arrow line to the center of the screen
N ⊗#⊗J Jump the arrow line up # lines
N ⊗-⊗#⊗J Jump the arrow line down # lines
N,A αL Go to first line of current page
N,A,E αβL Go to first line of incore text
N,A,E ⊗#αL Go to Line # of current page
N,A,E ⊗#αβL Go to Line # of all incore text
N,A ⊗T Glitch screen down from Top
E αβT Glitch screen down from Top
N,A,E ⊗U Move arrow Up a line (recommended cmd for non-displays)
N,A,E αV Redraw screen (without clearing)
N,A,E αβV Clear and then redraw screen
N,A,E ⊗#⊗V Redraw screen and then wait # seconds; ESC I ends wait
N,A,E ⊗W Go forward one window among incore text
N,A,E ⊗0⊗W Go forward a half window among incore text
N,A,E ⊗#⊗W Go forward # windows among incore text
N,A α. Write out current page (not including attach buffer)
N,A,E αβ. Write out current page (including current line editor)
N,A,E ⊗> Move arrow down 4 lines
N,A,E ⊗< Move arrow up 4 lines
N,A,E ⊗≥ Move arrow down half a screen
N,A,E ⊗≤ Move arrow up half a screen
N,A,E ⊗∧ Move arrow to top of screen
N,A,E ⊗0⊗∧ Move arrow to middle of screen
N,A,E ⊗∨ Move arrow to bottom of screen
N,A,E ⊗0⊗∨ Move arrow to middle of screen
N,A,E DRAW Redraw the screen now
These are Normal-mode commands. The CURRENT line is marked by an arrow
and is the line that would be processed if one were to enter the line-
editor. In the descriptions below it will be referred to as the arrow
line.
The first set of commands control the position of the window on the page.
The arrow is usually repositioned by these commands.
<form> Advance the window, that is, move the last line to the top. This
command (without control bits) does not advance the window beyond
the range of the in-core text.
An argument may be used (typed with control bits and preceding
the <form) to define the number of windowfuls to be advanced.
⊗W This is an older (still functioning) command to do the same thing.
⊗4<form> Advance 4 window among the incore text.
⊗4⊗W Same thing.
⊗0<form> Advance half a window.
⊗0⊗W Same thing.
⊗<form> Advance the window as defined above but move to beginning of the
next page if the the end of the in-core text is already within
the window.
β<form> This command is NOT a window moving command (see p. 6 for its
explanation). Do not confuse it with <form> or ⊗<form>.
<vt> Move the window up so that the first line becomes the LAST. This
is the reverse of <form>. This command without control bits does
not back up beyond the range of the in-core text.
⊗3<vt> Back up 3 windows among the incore text.
⊗0<vt> Back up half a window.
⊗<vt> Move the window up so that the first line becomes the LAST. This
or command (with any control bits), will move to the end of the
β<vt> preceding page if the start of the in-core text is already within
window. If any arg is given, that many windows are backed up,
but only among the incore text.
The following commands leave the page, window and arrow unchanged but
they refresh the screen. If any of these commands is typed ahead, the
screen will be redrawn immediately when the command is encountered,
despite any further type-ahead.
αV Redraw the screen WITHOUT first clearing it (the fastest).
αβV Clear the screen and then redraw it (this is slower on Data Discs).
⊗3⊗V Redraw screen as above then wait 3 seconds before continuing.
<esc>I will terminate the wait.
⊗XDRAW Exactly the same as ⊗V (in various forms explained above).
The following commands move the position of the window on the page, leaving
the arrow so that it still points to the same line of the text, if this is
possible, otherwise causing it to point to the first or last line on the
window.
⊗J Move (JUMP) the window so that the arrow line is at the top.
⊗0⊗J Move (JUMP) the window so that the arrow line is at the middle.
⊗-⊗J Move (JUMP) the window so that the arrow line is at the bottom.
⊗3⊗J Move (JUMP) the window so that the arrow line is 3 lines higher
in the window (with the top as the limit).
⊗-⊗7⊗J Move (JUMP) the window so that the arrow line is 7 lines lower
in the window (with the bottom as the limit).
Note that the default argument for the J commands is, in
effect, infinity, with the argument 0 having a special meaning
rather than being a undefined.
⊗T Glitch the screen so that 4 additional lines are displayed at the
or top (⊗T) or bottom (⊗B) of the screen. An argument, if used, is
⊗B in multiples of 4 lines of glitching. If either of these
commands is given from the line editor, then αβ must be used
(the α version will be a line editor command instead) and the
the arrow is maintained on the same text line, which is not
permitted to move beyond the edge of the screen, and you are
left still in the line editor.
The following commands move the arrow with respect to the window, without
moving the window.
⊗∧ Move the arrow to the top line in the window.
⊗3⊗∧ Move the arrow to the line that is 3 down from the top of the
window.
⊗9⊗9⊗∧ Since this would be off of the window the arrow is simply moved to
the bottom of the window. (The next command does this more easily).
⊗∨ Move the arrow to the bottom line in the window.
⊗4⊗∨ Move the arrow to the line that is 4 up from the bottom of the
window.
⊗0⊗∧ Move the arrow to the middle of the screen.
⊗0⊗∨ Move the arrow to the middle of the screen.
The following commands move the arrow with respect to the text. Should this
require the arrow to leave the currently displayed window, the window is
shifted, usually so that the arrow line will be in the middle of the window.
<cr> Move the arrow down a line, unless at row of stars.
⊗> Move the arrow down 4 lines.
⊗≥ Move the arrow down 1/2 screen.
<bs> Move the arrow up a line (cannot be typed ahead on non-displays).
⊗U Move the arrow up a line (works better than <bs> on non-displays).
⊗< Move the arrow up 4 lines.
⊗≤ move the arrow up 1/2 screen.
αL Move the arrow to the first line of the current page.
αβL Move the arrow to the first line of all the incore text.
⊗5αL Move the arrow to the 5th line of the current page.
⊗5αβL Move the arrow to the 5th line of all the incore text.
⊗∞αL Move the arrow to the end of the current page.
⊗∞αβL Move the arrow to the end of all the incore text.
The following comands move the arrow with respect to the text, as above,
AND they enter the LINE-EDIT mode. They may also be given when in the
LINE-EDIT mode (see p. 9) but they then require αβ with the arguments.
α↑ Enter the LINE-EDIT mode with the cursor at the end of the
previous line.
αβ↑ Enter LINE INSERT mode with the cursor at the end of the
previous line. See also p. 11.
⊗3α↑ Enter the LINE-EDIT mode with the cursor at the end of the
third previous line.
α↓ Enter the LINE-EDIT mode with the cursor at the end of the
next line.
αβ↓ Enter LINE INSERT mode with the cursor at the end of the
next line. See also p. 11.
⊗6α↓ Enter the LINE-EDIT move with the cursor at the end of the
sixth line forward.
The following commands remove text lines from the page.
αβD DELETE the entire CURRENT line.
This takes both α and β since αD has a different meaning.
To undo this command, use the ⊗XUNDELETE command (see p. 35).
Alternatively, you can use the ⊗XCANCEL command (see p. 6),
but that may have a larger effect than you want.
⊗4αβD Delete 4 lines starting with CURRENT.
Here are some commands that save the currently edited page on the disk.
Note: the current page is saved automatically whenever you change pages.
Also, whenever the page is written out, any text in the attach buffer
is excluded from that being written out.
α. Write the current page (as corrected) into the disk file.
This command is legal only from NORMAL MODE.
αβ. This command also writes out the current page, but it works
from NORMAL, LINE-EDIT and LINE INSERT modes. Thus it can be
given from within the line editor to write out the page
(including the current version of the arrow line) without
having to get out of the line editor.
⊗E Do a α. and then EXIT to the system. This is not a legal
command to execute during macro expansion because the same
command is used to put down any attach buffer (see p. 10).
After you exit from E, you can get back into E at the same
place by immediately using the system command CONTINUE.
Most of the NORMAL-MODE commands require the use of the CONTROL key (α)
and perhaps the META key (β). Exceptions are <cr>, <bs>, <form> and <vt>.
LINE MARKING commands.
Modes Command Meaning
N,A αM Go forward to next Mark
N,A ⊗-αM Go backward to previous Mark
N,A ⊗#αM Go forward # Marks
N,A ⊗-⊗#αM Go backward # Marks
N,A αβM Place a Mark on current line
N,A ⊗-αβM Clear Mark on current line
N,A ⊗0⊗M Report the number of Marks in current file
N,A ZMARKS Zero (clear) all line marks
E provides the facility of marking up to 23 line locations with a rapid
way to return to these locations by using the following commands.
Marks are relative with respect to the line locations on the page but the
stored values are corrected for line and page insertions and deletions so
that the marks appear to stick with particular text lines. However, the
justification commands and the line-breaking and line-joining commands do
not adjust marks properly, so those commands may cause the marks to move
slightly from the originally marked text lines.
Marks do not accompany attachments and they do not disappear when lines
are deleted. Instead, marks on lines that are attached or deleted are
moved to the first remaining line after the attachment or the deletion.
The ⊗XCANCEL command resets the marks for the page being cancelled to the
values they had when this page was last saved by an αβ. or page changing
command. Incidentally, if all marks, including those on other than the
current page, are removed by an ⊗XZMARKS command, they may all be restored
by the ⊗XCANCEL command, (if this is done before any page saving command)
with, of course, the accompanying restoring of the text of the current
page.
Marks are saved during ⊗ε, ⊗λ, ⊗? and ⊗H file-switching operations and are
restored on returning to a previously marked file.
αβM Plant a line mark at the current line on the current page.
⊗-αβM Clear the line mark (if any) on the current line.
αM Go forward to the next line mark (cyclicly).
α2αM Go forward to the second line mark found (cyclically).
α-αM Go backward to the first previous line mark (cyclicly).
α-α3αM Go backward to the third line mark found (cyclically).
⊗XZMARKS Clear all line marks.
⊗-⊗XZMARKS Clear all line marks on the current page.
LINE-EDIT commands.
Modes Command Meaning
E,L α<form> Move cursor to beginning of line
E <cr> Close line and move arrow to next line
E α<cr> Leave LINE-EDIT mode, stay on same line
N β<cr> Insert <cr>
E β<cr> Close line and insert <cr>
I β<cr> Insert <cr> but don't leave LINE INSERT mode
E,L <bs> Move cursor left a char, deleting if at end of line
E,L α<bs> Move cursor to left (never deleting char)
E,L β<bs> Delete char to left
E,L αβ<bs> Repeatedly move cursor to left (as long as held down)
N,E,L α<tab> Go to end of current line
E <alt> Restore line to original condition
E,L αB Move backwards in line editor to next char typed
E,L αD Delete char (if at end of line, delete CRLF)
N,E,L αI Enter Insert mode (at end of line, enter LINE INSERT mode)
N,E,L αK Kill characters forward up to next char typed
E,L αL Kill characters backward up to next char typed
N,E ⊗Q Copy line above, and enter copy in line-edit mode
N,E,L αR Repeat line editor αS or αK or αB or αL cmd
N,E,L αS Skip to next char typed
E,L αT Transpose the previous two chars in the line editor
N,E αβ; Set col of interest to current col and move straight up
N,E α; Move up to next line at old column of interest
N,E αβ: Set col of interest to current col and move straight down
N,E α: Move down to next line at old column of interest
N,E α↑ Move to end of line above
N,E α↓ Move to end of line below
E uses the line-editing commands that are a part of the operating
system. There is a limit (usually 133) to the number of characters that
the line editor can handle.
Typing a character without a CONTROL or META key will normally invoke
the line editor and the character is typed into the CURRENT line. A
cursor will appear under the first character in the line and in that
position where the next typed character will go. A character so typed
overwrites the character that was at the cursor's position. E will be
in the LINE-EDIT mode.
A word of caution--it is usually safe to continue typing on entering
the LINE-EDIT mode without waiting for the system to catch up. Most of
the earlier bugs that caused this to fail have been fixed but it is wise
to look before giving a carriage return and if anything is amiss to type
<alt> and start over again.
When the arrow appears to point at the bottom row of asterisks
(which, of course, is not in the text) E will accept anything that is
typed as an added line of text. The asterisks temporarily disappear
only to reappear below the new line on the completion of the addition,
and E reverts to the NORMAL mode.
When in the LINE-EDIT mode a <cr> will terminate the mode and move
CURRENT to the next line. A α<cr> will terminate the LINE-EDIT mode
without moving CURRENT. Remember that the line corrections do not
appear in the core image until you leave the line-editor mode.
Also remember that the version on the disk still does not show your
corrections until a disk update has been initiated. When in this
intermediate state the letter W will appear at the end of the title line
(with asterisks or dots at the top of the window, meaning that something
is yet to be written.
If your change will require the directory to be changed, this will be
shown by the letter D in this top line. The letter X can also appear if
the change requires an extension in the space on the disk assigned to
the current page. The letter X also appears on the trailer line with a
number specifying the number of extra records (of 128 words) that will
be required. If no extra records are required this X is replaced by the
letter R following a number specifying the number of records that the
page occupies or will occupy on the disk. After a deletion the letter B
may appear in place of this R or X, again preceded by a number that
specifies the number of all-null records that the page will contain.
By the way, window moving commands do not automatically update the
disk, whereas page changing commands always do an update.
Most of the line editing commands listed below will also enter the
LINE-EDIT mode from the NORMAL mode, except when the arrow is pointing
either at the row of asterisks (at the end of the page) or at an incore
pagemark. However, the following line editor commands will not enter
LINE-EDIT mode from NORMAL mode, where they have different meanings:
αT, αB, αL, α<form>, <bs> and ⊗<bs>.
If you make a mistake and perhaps lose some valuable information hit
<alt> rather than <cr> and your data will reappear as if by magic.
The following commands move the cursor without changing the line.
α<space> Move the cursor to the right 1 space.
α4α<space> Move the cursor 4 spaces to the right.
α<bs> Move the cursor to the left 1 space.
α5α<bs> Move the cursor 5 spaces to the left.
α<tab> Move the cursor to the end of the line.
α<form> Move the cursor to the start of the line.
αS then <char> Move the cursor to the next occurrence of <char>.
α3αS then <char> Move the cursor to the 3rd next occurrence of <char>.
αB then <char> Move cursor backwards to nearest occurrence of <char>.
This command will not enter the line editor from NORMAL
mode, where it has a different meaning.
α3αB then <char> Move cursor backwards to 3rd nearest occurrence of <char>.
The following commands allow you to insert or delete characters.
β<char> Make room and insert <char> ahead of the cursor
position.
αD DELETE a character and move the rest of the line to the
left. If at the end of the line, this will append the
next line to the current one. E will prevent this from
being done if the resulting line would be too long for
the line editor.
α4αD Delete 4 characters starting at the cursor position but do not
append the next line should the count exceed the number of
remaining characters in the line (unless command is given when
cursor is at the end of the line).
αK<char> KILL the line starting with the cursor position up to but
not including the character typed. Do nothing if the no
such character is found.
αK<cr> Kill the rest of the line starting with the cursor position.
α4αK<char> KILL the line up to the 4th occurrance of the character.
αL<char> KILL BACKWARDS starting with the previous character on back to but
not including the character typed. Do nothing if the no
such character is found before the cursor. This command will
not enter the line editor from NORMAL mode, where it has a
different meaning.
αL<cr> Kill BACKWARDS everything before the current character.
α4αL<char> KILL backwards everyting back to the 4th occurrance of the character.
The following command allows you to correct one of the most common typing errors.
αT Reverse the order of the two characters just ahead of the cursor.
This command will not enter the line editor from NORMAL mode,
where it has a different meaning.
The following commands allow you to leave the LINE-EDIT mode.
α<cr> Accept the line, leave LINE-EDIT mode but do not move the arrow.
<cr> Accept the line, leave LINE-EDIT mode and move the arrow down.
⊗U Accept the line, leave the line-edit mode and move arrow up
one line.
For completeness the <cr> and <bs> commands are listed togather to
remind you that they do quite different things depending upon the
associated control keys.
<cr> Accept the line, leave LINE-EDIT mode and move arrow down.
α<cr> Accept the line, leave LINE-EDIT mode but do not move arrow.
β<cr> Insert a <cr> before the cursor position; leave LINE-EDIT mode
(unless in LINE INSERT mode) but do not leave LINE INSERT mode.
αβ<cr> Break line at cursor and enter LINE INSERT mode (see p. 11).
<bs> BACK SPACE, deletes like β<bs> if at the end of the line,
otherwise just moves the cursor to the left like α<bs>.
α<bs> Move cursor to the left WITHOUT deleting.
β<bs> Delete the character to the left of the cursor position.
αβ<bs> Repeatedly move cursor to left (as long as held down).
The following commands allow you to enter or leave the INSERT mode.
αI Enter INSERT mode (like holding META down continuously).
Everything that you type (including carriage returns) will
be inserted until you type another line editor command. If
you give this command while at the end of a line, you will
enter LINE INSERT mode (see p. 11) instead of INSERT mode.
αβI Enter LINE INSERT mode (see p. 11).
α<cr> Accept the line, leave Insert or LINE INSERT mode but do not
move arrow.
<alt> Restore the line to it original condition and leave the
LINE-EDIT mode. (See p. 11 for its action when in
LINE INSERT mode.)
The following commands allow you to leave the line-edit mode, move to
another line and reenter the line-edit mode, all with one command.
α↑ Accept the line, then move to the end of the previous line.
αβ3α↑ Accept the line, then move to the end of the third previous
line.
α↓ Accept the line, then move to the end of the next line.
αβ6α↓ Accept the line, then move to the end of the sixth line
forward.
αβ↑ Enter LINE INSERT mode with the cursor at the end of the
previous line. See p. 11.
αβ↓ Enter LINE INSERT mode with the cursor at the end of the
next line. See p. 11.
α; Accept the line, then edit the PREVIOUS line at the "column of
interest" defined by the last αβ; or αβ: command.
αβ; Set the "column of interest" (for the α; and α: commands) to
the current column, then accept the current line and edit the
PREVIOUS line at the new "column of interest".
αβ3α; Accept the line, then edit the third PREVIOUS line at the
"column of interest" defined by the last αβ; or αβ: command.
αβ3αβ; Like αβ3α; after setting the column of interest to current column.
α: Accept the line, then edit the NEXT line at the "column of
interest" defined by the last αβ; or αβ: command.
αβ: Set the "column of interest" (for the α; and α: commands) to
the current column, then accept the current line and edit the
NEXT line at the new "column of interest".
αβ6α: Accept the line, then edit the sixth line forward from the same
display position as that from which this command was given.
αβ6αβ; Like αβ6α; after setting the column of interest to current column.
The above commands work in both NORMAL and LINE-EDIT modes, as does
the following command which allows you to copy a line and then edit it.
⊗Q Insert a copy of the line just above CURRENT and open it
for editing (i.e., enter LINE-EDIT mode in new line).
If you are editing a line and type something that the line editor
does not understand it will usually ignore the error (after thinking
about it for a moment) but don't bank on this too heavily because it can
fail.
If you type a legal ⊗ command (some are forbidden) when in LINE-EDIT mode
the line will be accepted as edited and the command will be carried out.
(Typing α. in LINE-EDIT mode returns to LINE-EDIT mode automatically without
writing the page because this command is illegal in LINE-EDIT mode.)
The α<cr> command, that works to recall a line from the system buffer
in the system's monitor mode, is replaced by the ⊗Q command as described
above.
COMMANDS GIVEN WHILE IN LINE-EDIT MODE
Many, but not all, of E's commands can be given when the user is
editing the current line in the system line editor. The command index on
p. 3 indicates for each command whether it is legal from the line editor.
The letter "E" in the "mode" column indicates a command legal from the
line editor.
When you activate the line editor with part of a command that might end
up returning you to the line editor without having accepted the edited
version of the line, E will redraw the line editor text while awaiting the
rest of the command. This currently applies to the following partial
commands: ⊗X ⊗Z. Also drawn will be a special cursor to indicate where in
the line you are giving the command from. (The cursor is the same one
you'll see when stepping macros -- wider than the normal ones on DDs and
IIIs.) However, if the line is longer than the screen width, the wrapped
around part of the line will not be displayed, nor will the cursor if it
is in that part.
LINE-EDITOR-ENTERING COMMANDS GIVEN FROM THE LINE EDITOR
E commands that normally cause the current line to be edited with the line
editor are legal even when given from within the line editor itself. Most
of these commands are usually handled directly by the line editor, without
E ever seeing them. But if such a command is generated in a way that
causes activation of the line editor, for instance, by preceded it with a
repeat argument using both CONTROL and META, then E figures out how to
carry out the command, usually including reloading the line editor with
the resultant text. Thus the command αβ8G will type eight G's into the
line editor, and αβ8βH will insert 8 H's.
Attach and Copy commands: ⊗A ⊗C
Modes Command Meaning
N,A,E,S ⊗A Attach 1 line
N,A,E,S ⊗#⊗A Attach # lines
N,A,E ⊗+⊗A Attach 1 more line
A ⊗-⊗A Attach 1 less line
N,E ⊗-⊗A Attach line just above current line
N,A,E,S ⊗#⊗C Copy # lines into attach buffer
N,E ⊗-⊗C Copy line just above current line
A ⊗+⊗C Copy one more line
A ⊗-⊗C Copy one less line (i.e., kill last line in attach buffer)
A ⊗E Leave ATTACH mode by putting down all attached lines
A αβK Kill all attached lines
A ⊗#αβK Kill # lines at front of attach buffer
A αβR Replace attached lines (put them back where picked up)
The attach (⊗A) and copy (⊗C) commands permit blocks of lines or
copies of them to be moved up and down on the page or from page to page,
or from file to file, as desired.
The ⊗A command removes one or more contiguous lines of text from the
core image of the page and places them in a special attach buffer. The
lines are still displayed on the screen in their original position, and
an "A" is displayed at the top of the screen to indicate that you are
now in attach mode.
The ⊗C command makes a copy or one or more contiguous lines and
places the copied lines in the attach buffer. An "A" is displayed at
the top of the screen, indicating that you are now in attach mode.
Note that if more than 8 lines are attached, then only the first 4
lines and the last 3 lines are shown so that one can see a few lines
both before and following the attached lines to be certain as to their
relationship to the rest of the page. The attached lines are marked by
vertical bars (thus |) at the left, except on Datamedias, where they are
indicated by being displayed in BOLD rather than lightface (this makes
attached blank lines somewhat hard to detect).
The apparent position of the attached lines can be made to move up or
down on the page or from page to page with the usual CURRENT-moving
commands to prepare for a final command which will deposit the attached
lined back into the core image of the text at the indicated position.
Perhaps this can be made clearer by remarking that the CURRENT line
designation is actually attached to the line following the section of
text that has been removed (although the → does not appear). What one
is actually doing when one appears to be moving the attached lines is to
move CURRENT around and E cleverly always displays the attach buffer on
the screen just above CURRENT, where it will in fact be put if one gives
the deposit-line command.
Basic commands.
⊗A ATTACH the CURRENT line and mark it with a "|".
⊗3⊗A ATTACH 3 lines starting with CURRENT and mark these with "|'s".
If a number greater than 8 is used, (for the 3 in the example),
only the first 4 and the last 3 lines are shown. A row of dots
is used to indicate that some attached lines are not shown.
⊗E Deposit the attached lines where displayed and Exit ATTACH
mode. Note: this command has a different meaning when one is
NOT in the ATTACH mode (it then means EXIT from E). Don't
stutter when typing it. Give the system time to react.
αβR REPLACE the attached lines in their original location and leave
the ATTACH mode. This command will put down all the lines at
the last place where you gave any version of the ⊗A command
(⊗A, ⊗+⊗A, ⊗-⊗A); thus if you attached the lines from various
different places, this command will put them all down at the
last place you attached (or unattached) any lines. However, if
you attached the lines by copying text with the ⊗C command (or
by using some other command that creates attached lines other
than by attaching existing lines from the page) and if you
haven't used any version of the ⊗A command since the ⊗C (or
other attached-line creating) command, then this command will
simply kill the attached lines.
αβK KILL the attached lines (they go away, but can be ⊗XUNDELETED)
and exit from the ATTACH mode. Note that αK is a line editor
command.
⊗4αβK KILL the first 4 lines in the attach buffer.
If you make a practice of using the CONTROL key only, when in
the ATTACH mode, (when it works) you will avoid the danger of
accidentally killing an attachment, if you mean to hit a J or
an L and hit a K instead.
⊗C Make a COPY of the CURRENT line and ATTACH this copy.
If there is already something in the ATTACH buffer when this
command is given then the entire attachment will be deposited and
re-copied. This provides a convienent method of making
multiple copies of any desired portion of text.
⊗5⊗C Make a COPY of 5 lines starting with CURRENT and ATTACH these.
Relative arguments.
Relative-argument commands add or remove lines from the end of the
attach buffer thus:
⊗+⊗A Attach 1 more line beyond those already attached.
⊗+⊗3⊗A Attach 3 more lines beyond those already attached.
⊗-⊗A Detach 1 line from the end of those already attached.
⊗-⊗2⊗A Detach 2 lines from the end of those already attached.
⊗+⊗C Copy 1 more line beyond those already attached.
⊗+⊗4⊗C Copy 4 more lines beyond those already attached.
⊗-⊗C Delete (kill) 1 line from the end of the attached set.
⊗-⊗2⊗C Delete (kill) 2 lines from the end of the attached set.
If the apparent position of the attached lines have been moved before
these relative-argument commands are given then additions and deletions
are made in terms of the apparent new location. This gets a bit hairy
in the case of deletions but it is a very useful device for assembling a
set of copied lines from several different places.
Note that a single attach command is only effective to the end of the
current page, and an attachment is deposited all on the same page.
A word of warning, a hazard is involved in using ⊗A to move lines
from page to page. The attached lines can be lost if the system should
crash during the interval between the removal of the attached lines from
one page and the final updating of the page to which they are moved.
This hazard can be avoided by copying the lines rather than attaching
them and then going back and deleting the original copy. This
precaution is hardly necessary for a line or two but it is a wise one
when you are moving large blocks of text.
Moving lines from page to page takes time, so don't get impatient.
This is a good place to comment on the RIPPLING report, that you may
have noticed in the scratch-pad lines at the bottom of the screen. This
notice appears when a major rearrangement of the text between records
becomes necessary. This also takes time.
LINE INSERT mode.
Modes Command Meaning
I α<cr> Leave LINE INSERT mode, stay on same line
N,I αβ<cr> Enter LINE INSERT mode and insert a blank line
E,I αβ<cr> Enter LINE INSERT mode breaking current line at cursor
N,E ⊗#αβ<cr> Insert # blank lines
N,E,I αβ<tab> Go to end of current line and enter line insert mode
I <alt> Close line, leave LINE INSERT mode, delete line if empty
N,I αβI Enter LINE INSERT mode and insert a blank line
E,I αβI Enter LINE INSERT mode in current line (new line if at end)
N,E,I αβ↑ Move to end of line above and enter line insert mode
N,E,I αβ↓ Move to end of line below and enter line insert mode
N,A,E,I AUTOWRITE Set or read autowriting threshold for line insert mode
While one can add text at the bottom of a page by simply moving the
CURRENT marker so that it points at the bottom row of asterisks (not the
dots), a special mode is used to insert lines of text at other points.
As a matter of fact it is usually better to enter this special
LINE INSERT mode if one is to type several lines even when at the end of
a page. Users on non-displays can only enter text in LINE INSERT mode.
When in the LINE INSERT mode, typing a carriage return inserts the text
of that line into the page (in core, not on the disk yet), creates a new
blank line below, and leaves you editing the new blank line. Each
carriage return in LINE INSERT mode thus creates a new blank line.
Various commands will get you out of LINE INSERT mode, usually keeping
the text of the last line inserted.
The only command that gets you out of line insert mode without accepting
the last line inserted is altmode, and even then the line's text will be
accepted unless the line is empty. Typing an altmode on an empty line
while in line insert mode will restore the line to its state as of the
time you entered line insert mode. In particular, either the line will be
deleted (e.g., if you typed <cr><altmode> while in line insert mode) or
the line's previous text will be restored (e.g., if you had entered line
insert mode on that line by typing ⊗I from within the line editor).
The fact that E is in the LINE INSERT mode is signalled by a double arrow
(↔) pointing to the current line instead of the usual right arrow (→) and
by an "I" appearing on the header line at the top of the screen. (On
Datamedias, neither the double arrow nor the right arrow is used. Only
the terminal's cursor marks the current line and the "I" at the top is
the only indicator of LINE INSERT mode.)
To enter the LINE INSERT mode:
αβ<cr> Given from normal mode (not editing a line), this command enters
LINE INSERT mode on a blank line inserted ahead of the current
line. Given from the middle of a line, this command will break
the line where the command was given into two separate lines and
leave you in line insert mode at the end of the first part. If
you were at the end of a line when you gave this command, you will
enter line insert mode on a new blank line inserted just below.
In any case, a double arrow (↔) and an "I" at the top will
indicate that you are in LINE INSERT mode.
αβI This command is the same as αβ<cr> except when given from the
line editor, in which case it enters line insert mode but leaves
you editing that line without either breaking it in two or
inserting a blank line. The next carriage return will, as
usual, insert a blank line.
αI This command enters line insert mode only when given at the end
of the line editor (otherwise, this is a line editor command).
From the end of the line editor, this command is just like αβI
given from the same place (enters line insert mode on a blank
line inserted below).
I This is the normal command for entering line insert mode on a
non-display; the effect is exactly the same as that of αβ<cr>.
αβ↑ Enter line insert mode at the end of the line above. No new
blank line is inserted by this command, but subsequently typing
<cr> will insert a new blank line (as usual in line insert mode.)
αβ↓ Enter line insert mode at the end of the line below. No new
blank line is inserted by this command, but subsequently typing
<cr> will insert a new blank line (as usual in line insert mode.)
αβ<tab> Enter line insert mode at the end of the current line. No new
blank line is inserted by this command, but subsequently typing
<cr> will insert a new blank line (as usual in line insert mode.)
While in LINE INSERT mode:
<cr> Accept the line and move down, inserting another new blank line.
α<cr> Accept the line and leave LINE INSERT mode, staying at the same line.
β<cr> Insert a <cr> but stay in line insert mode.
⊗U Leave LINE INSERT mode and move the arrow back to the line above
the accepted line.
<alt> Leave LINE INSERT mode without moving the arrow. If the last line
inserted is empty, then that line will be deleted provided that it
didn't exist when you entered line insert mode, but if it did
already exist, then its previous text will be restored. Typing
<alt> on a non-empty line while in line insert mode always keeps
the final text of that line.
AUTOWRITER FOR LINE INSERT MODE:
E can be made to automatically write out the incore text after a given
number of lines have been inserted in line insert mode; this is called
autowriting with a given threshold number of lines. The default is NEVER
to write out the text automatically.
When autowriting is enabled, it occurs only upon a CR given in line insert
mode, and then only every N lines, where N is the current threshold. When
autowriting occurs, a message to that effect is typed out and you are then
left still in line insert mode. Only lines created with line insert mode
are included in the autowrite line counter, and the counter is reset to
zero whenever the page is written out (by any means) and whenever you
switch pages or ⊗XCANCEL.
Here are the commands to set and inquire about the autowrite mode status.
⊗#⊗XAUTOWRITE Sets to # the threshold number of inserted lines after
which E will automatically write out the page.
⊗-⊗XAUTOWRITE Disables autowriting (the default state).
⊗XAUTOWRITE or ⊗0⊗XAUTOWRITE Reports the current status and (if
enabled) the threshold of the autowriter.
Handling very long lines. ⊗XBREAK ⊗XJOIN
Modes Command Meaning
N,A,S BREAK Break line(s) at given column position
N,A,S JOIN Join two or more lines by deleting CRLFs
The commands ⊗XBREAK and ⊗XJOIN can be used to manipulate, and to allow
editing of, very long lines because these commands do not change any text
in affected lines except for the deletion or insertion of CRLFs. ⊗XBREAK
breaks long lines by inserting CRLFs where necessary, and ⊗XJOIN joins two
or more more lines together by removing CRLFs. Each of these commands
take a numeric repeat argument which specifies how many lines are to be
affected. If the repeat argument is negative, then the command affects
the given number of lines preceding the current line and the arrow is left
pointing to the first line affected. Repeat arguments are limited to the
number of lines on the current page in the given direction from the arrow.
If there are any lines attached when ⊗XBREAK or ⊗XJOIN is given, then
lines from the attach buffer are broken or joined instead of lines from
the page.
⊗XJOIN joins the given number of lines (without introducing spaces for
the deleted CRLFs). If no repeat argument is given, two lines are joined.
⊗XBREAK will break lines at any specified column position by inserting
CRLFs. The column position may be specified by a numeric argument
following BREAK; the default BREAK column is originally 80 but any
typed-in column argument overrides this and is sticky. Breaks occuring
within a TAB are assumed to precede the TAB, that is, the TAB goes at the
start of the text on the next line. There is an exception to this if the
break is set at 8 or less and if a TAB occurs at the start of a line, when
the TAB will be placed on the first line.
If ⊗XBREAK is given WITH a preceding numeric argument, then that many
lines are broken (not, however, extending beyond the end of the current
page or the attach buffer) and each line is broken as many times as
necessary to prevent any resulting line from being longer than the
specified column argument.
If ⊗XBREAK is given WITHOUT a preceding numeric argument, then the
current line (or the first attached line) is broken AT MOST ONCE, at the
specified (or default) column position.
Search commands: ⊗F ⊗XFIND ⊗* ⊗XEXACT ⊗F<string>⊗P ⊗F<string>⊗: ⊗XSSLINE ⊗XSSPAGE
Modes Command Meaning
N α<cr> Position cursor at found string (after find)
<ESC>I Terminate multi-page FIND
N,A,E αF Find string (delimiters not required)
N,A,E αβF Find delimited string
N,A,E ⊗* Repeat last ⊗F or ⊗XFIND command
N,A,E EXACT Distinguish case of letters in searches
N,A,E FIND Do a multipage search for a given string
N,A,E SSLINE Set or report the search limiting line number
N,A,E SSPAGE Set or report the search limiting page number
SEARCHING -- SPECIFYING THE SEARCH STRING
The search can be for an alphameric string that is separated from
the rest of the text by non-alphameric characters or it may be for any
string regardless of its surroundings. Note that the FIND commands
normally make no distinction between upper and lower case, but the
⊗XEXACT command can be used to force such a distinction.
⊗XEXACT<cr> Distinguish between upper and lower case in subsequent
FIND commands of all kinds. FIND commands will only
find string occurrences whose cases exactly match
those given in the search string.
⊗-⊗XEXACT<cr> Do not distinguish between upper and lower case in
subsequent FIND commands. This is the default.
⊗0⊗XEXACT<cr> Report the current condition of case-checking.
For incore text searches the commands are:
αβFSmith<cr> Find just plain Smith or smith but not this string in
in $smith, in blacksmith or in Smithsonian. Note that
% and _ are accepted as alphamerics.
αFSmith<cr> Find smith as an isolated word or as part of a longer
string (in blacksmith for example). The string will
be found even where not delimited by non-alphamerics.
⊗0⊗F Type out the search string used in the last incore
text search command (⊗F). No search is done.
Note that no space is used between the ⊗F and the start of the string.
The repeat arg (default 1) in a search command specifies which occurrence
to find. A negative repeat arg specifies a reverse search, but reverse
searches are not implemented.
⊗3⊗Fsmith<cr> Find the 3rd occurrence of "smith".
The following extended search commands first search the incore text and
then (if necessary) continue the search through the rest of the file.
αβXFIND Smith<cr> Find a delimited string ("Smith" here).
αXFIND Smith<cr> Find the string ("Smith") regardless of surroundings.
⊗0⊗XFIND<cr> Type out the search string used in the last extended
search (⊗XFIND). No search is done.
Note that exactly one space is required between the command "FIND"
and the search string. Commands starting with the letter ⊗X are EXTEND
commands which permit more than a single character to be used for the
command name, hence the need for the space to mark its end. In this
case the complete command name is FIND, but, since there are, at
present, no other extended command names beginning with F, only the F
needs to be typed, as αXF Smith<cr>.
Extended searches made in unformatted files are carried only as far
as the core directory has been extended. To search the entire file, one
should first complete the directory by switching to the last page and
then switch back to the desired starting page for the search. The fact
that the directory is incomplete is evidenced by the use of the "?" in
the trailer line, in lieu of the usual number, to show the total page
count (thus, "Page 13 of ?").
The delimited find command (αβF or αβXF) will not find an occurrence
of the search string that starts in column 1 of the current line, but
the non-delimited command (αF or αXF) will find such an occurrence.
A string, once specified, is sticky; that is, one need not retype the
search string for a repeat of the command. The search string for an
incore text search (⊗F command) is remembered independently from that
for an extended search (⊗XFIND). For a repeat one repeats the command
up to the string itself and then types the desired termination (a <CR>
as shown above, or any termination listed below).
Special repeat commands exist which simplify the repeated search.
These are easier to use than the regular repeat command, described
above, but only the last executed type of FIND can be repeated. Two of
the more commonly used terminations are simulated by using different
control keys with the ⊗* command.
αβ* Find the next occurrence of the string specified by the last
FIND command (whether an incore text search (⊗F) or an extended
search (⊗XFIND)). Move the line cursor to the found line but
do not enter the LINE EDITOR, that is, duplicate a normal
FIND command that is terminated by a <CR> only. An argument
may be used (such as αβ1αβ3αβ*) to find the Nth occurrence.
α* Find the next occurrence of the string specified by the last
FIND command (whether an incore text search (⊗F) or an
extended search (⊗XFIND)). Leave the line in the LINE EDITOR
as it would be for a normal FIND command terminated by a
α<CR>. If there is something in the ATTACH buffer, this is
interpreted as an αβ* command. See below for method of using
an argument.
⊗4α* Find the fourth occurrence of the string specified by the
last FIND command (whether an incore text search (⊗F) or an
extended search (⊗XFIND)) and position the cursor under the
first character of the found string (as it would be for a
normal FIND command that is terminated by a α<CR>). If this
command is given from the line editor, the argument must be
typed with both control keys (αβ) to force activation of the
line editor.
⊗0⊗* Type out the search string used in the last FIND command
executed, and indicate whether it was an incore text search
(⊗F) or an extended search (⊗XFIND). No search is done.
SPECIAL CHARACTERS IN THE SEARCH STRING
The following special symbols may be used in the search string with
the meanings noted. If these characters are desired as ordinary
characters in the searched-for string they must be preceded by the
identity symbol ≡.
Symbol Meaning
¬ The character that follows must not be in the string at
this point but any other character will be accepted.
| Any delimiter (not one of $_% nor a letter nor a digit).
∀ Any character.
≡ The character that follows immediately after this symbol
is not to be treated as a special symbol but it is to be
included as a character in the searched-for string. Use
this to quote any of these special characters.
∞ Not at present implemented, but still must be quoted.
⊂ Not at present implemented, but still must be quoted.
SEARCHING FOR STRINGS THAT INCLUDE <cr>
To search for a string that contains one or more <cr>s, you must
surround the entire string with <lf>s and quote each <cr> with an
equivalence sign (≡). Each <crlf> (carriage-return & linefeed) in the
text is considered during searches to be one character, namely a <cr> --
the <lf> is ignored. E.g., to search for X<crlf>Y type:
⊗F<lf>X≡<cr>Y<lf><cr>
SEARCH-STRING ENDING COMMANDS -- Normal, Search-distance, Directory, Reverse
The action to be taken for a search is specified by the command used
to activate the search string, and there are four general possibilities,
depending on what the string-ending command is.
(A) Most commands first allow the search to move to the line where
the string is found, and then the string-ending command is
executed normally.
(B) Certain commands use as their repeat arg the search distance
(in lines) between the original line and the line where the
string is found (inclusive), and this type of command is
executed with that arg FROM THE LINE WHERE THE SEARCH STARTED.
Thus commands in this class are able to utilize the search as a
means of specifying the number of lines to operate on. The
commands in this class are indicated in the index on p. 3 by an
"S" in the modes field. Included among these commands are: ⊗A,
⊗C, αβD, ⊗XJUST (and the other justify commands), and many
others that take a number of lines as a repeat argument.
Certain of these commands actually subtract one from the
resultant search distance, in order not to affect the line
where the string is found; this is done in order to make the
command do the "right" thing. The user can experiment to find
out which commands these are.
(C) Some commands used to end a search-string cause the directory
to be searched instead of the normal text. If the string is
found in the directory, then E moves to the page on whose
directory line the string is found and then does some
command-specific action. (See individual commands below.)
(D) Ending a search string with ⊗U indicates that you want to do a
reverse search; that is, you want to search the text backwards
from the current line. Unfortunately, reverse searches are not
implemented.
The command most commonly used to activate the search string is <cr>, which
simply causes the arrow to be moved to line where the string is found.
If the command ending the search string is another search commmand, then
the arrow will be moved to the line where the string is found and then E
will wait for you to complete the second search command.
Whenever a search is initiated from the line where the previous search
found its string, the new search will start from the position in the line
just beyond the beginning of the previously found string, so that
successive searches for the same string will find different instances of
that string.
The only line editor commands that can end a search string are αD and αI,
both of which are in class (A) above. These line editor commands are
executed after moving into the line at the position where the string is
found.
Here are the most important search-string-ending commands and their effects:
<cr> Move CURRENT to the found line or report failure.
α<cr> Terminate, as with <cr>, but move the cursor until it is
under the first character of the string. Note that this
leaves E in the LINE-EDIT mode. A second FIND command can
however be given and the next occurrence will be found. If
a FIND command is terminated with <cr>, a α<cr> will still
move the cursor to the string.
⊗J JUMP the line with the found string to the top of the
window.
αβ<cr> Enter the LINE INSERT mode with the ↔ at a newly inserted
blank line ahead of the found line.
αP Make the search over the directory page and then display
the referenced page with the line pointer at the top line.
Note that one can give this command without having to
give an explicit command to go to the directory page.
If the search fails, the arrow is not moved.
αβP Make the search over the directory page and then display the
referenced page with the line pointer at the second
occurrence of the referenced string on that page (the first
will be in the first line of the page).
⊗: Make the search over the directory page and then display
the referenced page with the line pointer at the line
which contains the referenced string as a label (namely,
the line where the string is followed by ":", "=" or "←").
⊗+αP Just like the command without the ⊗+, except that only
⊗+αβP pages after the current one are searched in the directory.
⊗+⊗: This is a very useful command when a string occurs on
several directory lines (i.e., on the first line of
several pages).
All of the above directory searching commands point
out when the resultant page turns out already to have
been in core by saying "(incore page)". This lets
you know whether to use αN or αO to get back where
you came from.
⊗A ATTACH all lines starting with CURRENT up to and including
the line with the specified string. If used with the
extended search command (⊗XFIND) and if the string is not
amoung the incore text, this command will attach text
starting at the top of the page on which the string is
found. Attachments do not cross page boundries.
⊗C COPY all lines starting with CURRENT up to and including the
line with the specified string. See ⊗A above for
restriction with extended search command.
αβD DELETE all lines beginning with CURRENT up to but NOT INCLUDING
the line with the specified string. See ⊗A above for
restriction with extended search command. This is a very
dangerous command so use it with caution. A safer command
sequence to use when you are unsure where the search string will
be found involves using the ⊗A search string terminator to
attach the text first (to make sure it is the right text), then
if necessary to attach a few more lines or unattach a few lines,
and finally to delete the attached text with αβK.
⊗\ Terminate the searched-for string and prepare to accept a
substitution string. The substitution string is then typed
in and may be terminated in any one of several ways. For
details see String Substitution Commands on the next page.
Note that there is a special repeat command for this case so
do not try to use the repeat conventions that are used for
simple searches.
<alt> Abort the present command. When <alt> ends an incore text
search string (⊗F), the string ahead of the <alt> is retained as
the new default incore text search string (unless that string is
empty) although no search is done. When the <alt> ends an
extended command search string (⊗XFIND), the previous default
extended search string is retained.
ESC I TO ABORT AN EXTENDED SEARCH COMMAND OR A MULTIPLE SUBSTITUTION
The <ESC>I command will terminate any extended search command in
progress at the end of the page currently being searched (unless the
string is found before the end of that page); <ESC>I will report the page
number where searching was interrupted.
The <ESC>I command will also terminate any multiple substitution
(even the one-page type) after the next substitution is done; see p. 14.
SEARCH LIMITING: ⊗XSSLINE ⊗XSSPAGE
The commands ⊗XSSLINE and ⊗XSSPAGE set or report the limit line number and
limit page number for searches and substitutions. These commands can be
used to keep searches and substitutions from going beyond a given incore
line or a given page; search limiting affects these commands:
⊗F ⊗XFIND ⊗* ⊗\ ⊗( ⊗) ⊗XLPAREN ⊗XRPAREN
The ⊗#⊗XSSLINE command sets the search-limiting incore LINE number to the
given argument (#), and similarly ⊗#⊗XSSPAGE sets the search-limiting PAGE
number to the argument (#). In both cases, if the argument is relative
(⊗+ or ⊗- used), then the limit is set by the command at the given
distance (lines or pages) from the current place (line or page) (but is
fixed once set by the command; that is, it is not permanently relative to
the arrow's position). If the argument is omitted entirely, then the
corresponding type of search limiting is disabled. A zero argument will
cause E simply to report the given search-limit.
Search-limiting stops any search (except a directory search, see below)
that encounters the given limit line or the beginning of the given limit
page; for instance, ⊗5⊗XSSPAGE will stop any search that encounters the
beginning of page 5, so page 5 will NOT be searched (but a search started
already on page 5 won't be limited). As another example, ⊗+⊗XSSLINE will
limit any search to the current line, since it will stop any search upon
reaching the following line. The search-limiting LINE number applies only
to incore text and is cleared when you flush all incore text (e.g., by
going to another page or by doing an ⊗XCANCEL command). The
search-limiting PAGE number applies both to incore pagemarks and to
not-in-core pages (the latter reached only by the ⊗XFIND, ⊗XLPAREN, and
⊗XRPAREN commands); the limiting page number is cleared when you change
files. Search limiting is always completely disabled during directory
searches (e.g., ⊗F...⊗P and ⊗F...⊗:).
Any incore limit line number set up is adjusted for text insertion and
deletion, to preserve the point in the text at which searches will stop.
Currently, however, any limit page number is NOT adjusted for page
insertion/deletion. The two readonly variables SSLINE. and SSPAGE. are
available for macros to find out the current search limits; a negative or
zero value means the corresponding type of search limiting is disabled.
Note that the limit LINE number is counted from the beginning of ALL
incore lines, not just relative to the current page if you have more than
one page in core.
SUBSTITUTION commands: ⊗\
Modes Command Meaning
N,E ⊗\ Repeat last substitution command
<ESC>I Terminate multiple substitution
String substitution commands are initiated by first giving a normal FIND
command but using one of the two special string terminating characters,
⊗\ (back-slash) or <lf> (linefeed). This is then followed by the
substitution string which, in turn, is terminated by either a simple
carriage return (which may be preceeded by an argument, typed with
control keys) or by α<CR>. Note, many of the otherwise acceptable Find
command terminations are not meaningful with the substitution commands
and are not allowed.
Please observe that an argument before the initial FIND command means
find the specified occurrence before making the substitution while an
argument before the final termination means make the substitution the
specified number of times starting with the initial arrow position (or
with the initially specified occurrence, if there is an initial
argument).
The prefered method for making repeated substitutions is to request an
initial single substitution and then to ask for the desired remaining
substitutions by the αβ\ command prefaced by an argument specifying the
remaining number of times the substitution is to be made.
Characters in the searched-for string that are preceeded by the special
control symbols ¬ and ≡ and all characters that are represented by the
special symbol ∀ or by the symbol | (see p. 13 for the explanation of
these symbols) are treated as any other character and are deleted and
replaced by the substitution string. The "partial definition feature"
as implemented in SOS is not at present available. The | symbol in the
searched-for string can not be used to replace a carriage return.
Note: The FIND command does not find the very first delimited
string on the line to which the cursor is pointing (unless it is
in fact preceeded by delimiter). This limitation is of little
consequence for the simple FIND but it is an annoyance if one
wants to replace all occurrences of a symbol (or string) which
happens to be the very first symbol (or string) on a page. One
can introduce an initial space into the first line or one can
introduce an initial blank line temporarily and have the cursor
at this line. The space or line can then be removed after the
substitution.
In the rest of this write-up "all occurrences" means "all except the
very first character or string on the line to which the cursor is
pointing at the time that the command is given when the search request
is for a delimited string".
Also, the remaining descriptions assume that the ⊗XEXACT command has NOT
been given. If ⊗XEXACT has been given, then substitutions will be made
only for occurrences with the Exact case of letters given in the search
string.
Sample commands.
αβFSTRINGαβ\"String"<CR> Find the first occurrence of the
string STRING, whether typed in lower or upper
case letters and replace it by the substitution
string as typed, that is, enclosed in quotes and
with the initial letter only in CAPS. Limit the
search to the incore text starting at the cursor
location.
αβFSTRING<LF>"String"<CR> Same as the above example, but
typeable on a non-display because of the linefeed
that is used instead of αβ\ to end the search
string.
αβFSTRINGαβ\"String"αβ∞<CR> Find all occurrences of the
string STRING, whether typed in lower or upper
case letters and replace them by the substitution
string as typed, that is, enclosed in quotes and
with the initial letter only in CAPS. Limit the
search to the incore text starting at the cursor
location.
⊗9αβFSTRINGαβ\"String"αβ∞<CR> Find all occurrences of the string
STRING, as above, but start the substitution with
the 9th occurrence.
αXFIND ←αβ\ <BACK ARROW> α<CR> Find the first occurrence
of the character ← whether among incore text or
on a subsquent page and replace it by the string
<BACK ARROW> (including the < and >) and with
spaces introduced before and after these
characters. Leave the resulting line in the line
editor.
The <CR> termination is the faster mode of operation in that it does not
use the the line editor and it is not subject to any effective
limitation as to the length of lines that may be handled. This mode
does have one defect in that the substitution is completed and is not
subject to the simple <ALT> method of aborting a single line correction.
When the α<CR> termination is used the substitution is made via the line
editor and the results are left in the line editor's buffer so that the
substitution may still be aborted by the usual <ALT> command.
The usual rules apply to the specification of the searched-for string.
The substitution string may, however, contain certain delimiters (spaces
in particular) whether or not the search is for a delimited string and a
distinction is made between upper and lower case letters. Only the
searched-for characters without delimiters are replaced. To be
specific, if one were to replace a delimited string by a null
substitution string, the two delimiters would remain in the corrected
text.
Currently, substitution cannot be done for the CR (or LF) at the end of
any line of text. A warning message will be issued when you try to
make such a substitution. Also, no substitution can be done for
pagemarks (formfeeds).
The substitution string is sticky, so that a substitution command, when
successfully executed for a single occurrence, may be repeated for the
next occurence by typing αβ\ only. The typing of a new string for the
searched-for string destroys the record of the previously saved
substitution string and the entire request must be retyped before this
command will be honored.
A null substitution string may be used and no longer reguires
confirmation.
Extended substitutions are useful but potentially dangerous as the
substitutions made on any one page are, of course, written out onto the
disk file when ever a new page is entered.
As noted earlier, typing αβ\ after a legal substitution command will repeat
the substitution. This command may be preceeded by an argument (with
control bits) and the substitution will be repeated the specified number of
times. Should substitutions occur on more than one page, all substitutions
on pages earlier than the last page will have been written out (except when
all occur on the incore text, which might be several pages).
The use of the command α\ rather than αβ\ causes the altered line to be
left in the line editor with the possibility of an <ALT> abort.
Sample repeat commands.
αβ\ Repeat the previously made substitution at the next
occurrence of the searched-for string.
αβ6αβ\ Repeat the substitution for the next 6 occurrences.
α\ Repeat the substitution once but leave the results in
the line editor buffer.
⊗0⊗\ Type out the search and substitute strings last used in a
substitute command, and indicate whether it was an incore
text substitution or an extended substitution.
The <ESC>I command will terminate any multiple substitution (even the
incore type) after the next substitution is done.
FILE-SWITCHING and text transfering commands: ⊗ε ⊗λ ⊗∃ ⊗? ⊗XPOINTER
Modes Command Meaning
N,A ⊗ε Switch to given file in READWRITE mode
N,A ⊗λ Switch to given file in READONLY mode
N,A,E ⊗∃ Show names of files in fileswitch list
N,A ⊗? Switch to the file E.ALS[UP,DOC]/R
N,A ⊗#⊗? Go to page # in E.ALS
N,A ⊗+⊗#⊗? Go to E.ALS, # pages beyond where last left it
N,A ⊗-⊗#⊗? Go to E.ALS, # pages before where last left it
N,A POINTER Switch to a file named in the incore text
The file switching commands ⊗ε and ⊗λ cause E to close the current
file being edited (writing out the current page if necessary) and then
to ask for the name of another file to be edited. That file is opened
for editing, with any ATTACH buffer maintained while switching files.
Thus you can switch back and forth, editing different files, and easily
moving or copying text from one file to another simply by attaching the
lines desired. The ε command (ENTER) opens the new file in read-write
mode while the λ command (LOOK) opens the file in read-only mode.
All of the usual switches may follow the filename typed with these
commands; for example, you can use /8P to go to page 8 in the new file,
/E to go to the end of the file, /N to open the new file in no-directory
mode, /C to create the file you want to switch to, etc. See p. 20 for
more details.
If the filename requested by ⊗ε or ⊗λ is omitted, and if one or more
switches are included, then the file assumed by the command will be the
one you were editing just prior to giving the command. Only the same
filename is implied by this mechanism; no modes are assumed for the new
edit. This makes switching major modes (like /N) easier; the filename
doesn't have to be retyped. Also, this makes it easier to burp a whole
file; ⊗ε/∞F<cr> will burp the current file.
As different files are referenced, each file is assigned a number
which can be used thereafter as an argument to the ε or λ command to
call the desired file without retyping its name. Also, a stack is kept
of the files you have been in recently and you can return to a file that
is a particular distance down in the stack. See p. 34 for the file
stack manipulation command ⊗H. Whenever you return to a file, any
previously existing line marks and the top part of that file's page
stack are restored.
The names of up to eight different files edited are remembered by E.
When you try to edit a 9th file, the file at the bottom of the file
stack is forgotten to make room for the new file's name. The user is
warned of this replacement.
The list of files with their referencing numbers is typed out by the
command ⊗∃. The command ⊗0αH types out the file stack.
Finally it is possible to reference the E-manual file, E.ALS[UP,DOC],
by typing the ⊗? command. The first reference to this manual will be to
page 2 which contains information on recently made changes to E.
Thereafter the manual file is opened at the last referenced page and
line. One may, however, override these default values by typing an
absolute or relative argument to specify the absolute or relative number
of the page to go to.
E is smart enough to detect most cases when one tries to format a
binary file or an XGP file and it will tell you this and give you
another chance to say No.
⊗ε<file name><cr> Close the current file and open the specified
file in read-write mode. The usual switches /#P, /#L and
/C may be used.The new file is assigned a serial number by
which it may be called later. (The initial file is
numbered 0). When called by number the display is
returned to the last referenced page and with the arrow on
the last referenced line and all previously set line marks
restored.
⊗3⊗ε Reopen the file assigned the serial mumber 3 in read-write
mode. Note that no carriage return is used in this case.
Return the display to the last referenced page. Return the
arrow to the last referenced line and restore all previous
line marks. (Use the ⊗∃ command, below, to find numbers).
⊗λ<file name><cr> Close the current file and open the specified
file in read-only mode. The usual switches /#P and /#L
may be used. The new file is assigned a serial number by
which it may be called later. (The initial file is
numbered 0).
αβ3⊗λ Reopen the file assigned the serial mumber 3 in read-only
mode.
⊗∃ List the previously referenced files with their serial
numbers. For convenience the letter H accompanies the number
in the listing of the "HOME" file and a "]" is used rather
than a ")" for the file currently being edited.
⊗XZFILES<cr> Move the current-file listing to location zero and clear
the remainder of the filelist. Clear the file stack.
αH Return (Home) to the last referenced file. The E-manual
file is never considered a home file.
⊗? Close the current file and open the E manual file
E.ALS[UP,DOC] on page 2, (for changes) or, if it has been
referenced earlier, to the last referenced page and line.
page and line.
⊗1⊗? Close the current file and open the E manual file
E.ALS[UP,DOC] on page 1, the directory page.
⊗8⊗? Close the current file and open the E manual file
E.ALS[UP,DOC] on page 8.
⊗-⊗2⊗? Close the current file and open the E manual file
E.ALS[UP,DOC] at 2 pages before the previously referenced
page.
SWITCHING TO A FILE NAMED IN THE TEXT:
The ⊗XPOINTER command is used to switch to a file whose name is found in
the text of the page you are editing, at or below the current line.
With an argument of zero, the command ⊗0⊗XPOINTER will merely move to
the line containing the filename found (if any) and type out the
filename, but will not switch files. The command with no argument moves
the arrow to the line containing the filename found (if any) before
attempting to switch files.
Furthermore, a numeric argument can be given to the ⊗XPOINTER command to
have it find the nth filename in the text; thus it is possible to switch
to any of several files all named on a given line. An arg of the form ⊗#
will make E merely type out the #th filename, without moving the arrow and
without switching files. An arg of the form ⊗+⊗# means switch to the #th
file named in the text; this is conveniently done right after the ⊗# form
has verified that the filename found was the one you wanted to switch to.
Since ⊗# doesn't normally move the arrow (so that you can then say ⊗+⊗#
without having changed the significance of the number), an arg of the form
⊗-⊗# finds the #th filename and moves the arrow to that line but doesn't
switch files.
Summary of meanings of ⊗XPOINTER args:
Arg Meaning
(none) Switch to first file named in the text at or below current line.
⊗0 Type out the first filename in the text, and move to its line.
⊗-⊗# Type out the #th filename in the text, and move to its line.
⊗# Type out the #th filename in the text (without moving).
⊗+⊗# Switch to the #th file named in the text.
A filename in the text will not be recognized unless it is preceded by a
space, a tab, a double quote ("), a number-sign (#), or an at-sign (@) or
occurs at the beginning of a line. Furthermore, to be accepted by this
command, a filename must have at least one of these: (1) an explicit
(non-null) extension, (2) an explicit (complete) PPN, (3) one or more
switches, or (4) a valid filehack. Spaces are permitted only as leading
spaces in PPNs for blank characters in the project or programmer name, and
a filename with its switches must occur all on one line. The extension
".>" is allowed, but it must not immediately be followed by another ">".
Finally, a filename of less than four characters (like "A.I" or "F/X")
will not be recognized by E unless it contains a filehack (which can be
any length). Thus the following filenames will be recognized:
FILE/-R, FILE.>, FILE[J,G], FILE.EXT[J,G](R9P7L), FILE.[ J, G], \GRIPES.
The following will NOT be accepted: FILE., FILE[X], FILE/6PR, F[ ABC,D].
The only characters permitted in names within the filename are letters
(case of letters is ignored), digits, the ">" character (only as the
entire extension), and the underbar character (which represents a quoted
space). In particular, the down-arrow construction, the partial-sign
name, and the question-mark name are not permitted in filenames.
Any switches following a filename in the text will be observed in
switching to that file. In addition, any text following the extended
command name will be appended to the filename after any switches found in
the text. Thus additional (or overriding) switches can be specified, or
if no PPN or switches appear in the text, an explicit PPN can be added.
(If the text says READ NOTICE/231P, you can use ⊗XPOINTER/D to get the
READ facility into a switch.) Switches in the text must be perfectly
well-formed or the filename they are applied to will not be recognized.
This means that parentheses must be balanced and no letter or digit can
immediately follow the letter of a slash-type switch. However, the
actual letters of switches are not checked for validity (as indeed they
never are by E -- undefined switches are completely ignored).
This command's default mode for switching to a file is readonly (/R).
However, this can be overriden with an explicit /-R occurring among the
switches in the text or typed in the command line after the extended
command name (e.g., ⊗XPOINTER /-R<cr>).
When you attempt to switch files with this command, if the file named in
the text cannot be edited because it does not exist, is busy, etc., E will
abort the fileswitching operation automatically (nevertheless having
written out the current page before attempting to switch files). If,
however, the combined (text and command line) filename with switches has
an illegal syntax, E will say so and then load your line editor (on
displays) with the combined text so that you can correct it and try again.
Justification: ⊗XJFILL ⊗XJUST ⊗XJGET ⊗XSJFILL ⊗XSJUST
(See p. 17 for ⊗XTJUST ⊗XTJFILL ⊗XTABLE and ⊗XTJGET)
(See p. 18 for ⊗XALIGN, ⊗XINDENT, ⊗XJCENTER)
Modes Command Meaning
N,A,S JFILL Justify paragraphs w/out aligning right margin
N,A,S JGET Get justification margins from text
N,A,S JUST Justify paragraphs and align at right margin
N,A,S SJFILL Separate text into justified sentences
N,A,S SJUST Separate into justified right-aligned sentences
TEXT JUSTIFICATION
E has several justification commands. The basic commands are ⊗XJFILL
and ⊗XJUST -- the former fills lines as much as possible without
inserting extra spaces, and the latter justifies the right margin by
inserting extra spaces where needed. The commands ⊗XSJFILL and ⊗XSJUST
are similar but make each Sentence start on a new line. The command
⊗XJGET is useful for setting up the margins from already-justified text
on the page. These commands (JFILL, JUST, SJFILL, SJUST, JGET) all use
the same set of margins. The commands ⊗XTJFILL, ⊗XTJUST and ⊗XTJGET can
do the same things as the same commands without the leading "T" in the
name, but the "T" commands use a different set of margins (so you can
have two sets of margins in effect at a given time) and they are
designed to handle a special form of paragraph -- one that has zero or
more "Tab fields" preceding the text in the first line of each
paragraph. The "T" commands can align these tab fields and
simultaneously justify the remaining text of each paragraph. The "T"
commands are described on p. 17.
The range of application of any justification command may be limited by
a prefixed decimal argument. If no argument is specified, the command
affects the entire page. If there is an attachment, the command works
on the ATTACH buffer instead of the page. When the range is limited by
a positive argument, the command starts with the arrow line and goes
forward whereas for a negative argument the command works on the
specified number of lines before (but not including) the arrow line.
There is no effective limit to the length of lines or the margins that
can be handled by the justication commands.
If you're not sure what a justification command will do, you should
execute the ⊗. command to write out the page before the justification so
that you can undo any undesired effect with the ⊗XCANCEL command.
BASIC JUSTIFYING COMMANDS: ⊗XJFILL and ⊗XJUST
The line filling command ⊗XJFILL adjusts the lengths of lines by moving
words from line to line as required to achieve the specified maximum line
length (right margin). At the same time this command permits the left
margin to be fixed at any desired position with a separate settable
indentation for the first line of each paragraph (crown margin), and it
allows one either to preserve blank lines or to specify the desired number
of blank lines preceding each paragraph (blanklines margin). The ⊗XJUST
command does the same things as the ⊗XJFILL command but also justifies the
right margin by distributing additional spaces between words. Both of
these commands put two spaces after each sentence, where the end of a
sentence is indicated by one of the characters .?!: followed by either two
spaces or the end of the line, optionally with any of the characters >]}")'
occurring between the .?!: and the spaces or end of line.
SETTING THE MARGINS
The margins can be changed by giving a justification command and
following the command name with a space and then the desired new
margins, separated by commas. The margins are always given in the
same order, namely, Crown, Left, Right, Blanklines. Any margin that
is not being changed can be omitted but its comma must appear if any
subsequent margins are being specified. Any margins set remain in
force until explicitly changed. The meanings of the various margins
are explained below.
The Crown margin is the indentation used for the first line (crown
line) of each paragraph.
The Left margin is the indentation used for all non-crown lines.
The Right margin is the maximum length of a line, including any
indentation.
The Blanklines margin is the number of blank lines desired ahead of
each paragraph -- setting this margin to -1 will cause E to
preserve exactly the number of blank lines found in the text.
The margins are initially set to 0,0,74,-1 (C,L,R,B). This means that
the crown margin (paragraph indent) is 0, the left margin (non-crown
indent) is 0, the rightmost character is not to go beyond column 74, and
the distribution of blank lines is to be the same in the resulting text
as found in the original text.
To find out the current margins, use an argument of zero with a
justification command, for example ⊗0⊗XJFILL<cr>. A zero argument is
also useful for setting the margins without doing any justification.
DETECTING PARAGRAPHS IN INPUT TEXT
A simple procedure is used to determine where paragraph breaks occur in
the input text being justified. For justification purposes, a new
paragraph is indicated by (1) an empty line or (2) a line indented
exactly the right amount (that is, a line having the right number of
leading blank columns, whether tabs or spaces or both are used to make
the indentation).
The amount of indentation that indicates a paragraph in the input text
will be called the DETECT-PARAGRAPH margin, or simply the DETECT margin.
Note: If you haven't set the detect margin explicitly (see below), and
if the crown margin and the left margin are the same, then only blank
lines will indicate new paragraphs in the input text (otherwise every
line would become a separate paragraph).
The detect margin is normally the same as the crown margin. However,
for changing the crown margin of justified text that has no blank lines
between paragraphs, the detect margin can be set explicitly to any
value. Furthermore, it may be necessary to set the detect margin to
some non-occurring value (e.g., 99) to prevent paragraph detection from
occurring on lines that are already indented by the amount that you want
paragraphs to be indented (that is, the (new) crown margin). For
instance, when changing from 0,0,74 to 0,8,74 you'll need to set the
detect margin to a non-zero value (e.g, use 99/0,8,74).
The detect margin can be set in any justification command by
typing its value immediately after the extended command name and
following it with a slash ("/"). After the slash, the normal margins
(crown, left, right, blanklines) can be specified, separated by commas.
For instance, the command ⊗XJUST 8/7<cr> would set the detect margin to
8 (for paragraphs indented with one tab or eight spaces) and then would
rejustify the text so that each paragraph was indented only 7 spaces.
Note that the detect margin remains in effect until you change either
the crown margin, the left margin, or the detect margin itself. Thus
after the above command, E would no longer recognize the new crown lines
(now indented 7 spaces) as such since the detect margin would still be
8. The detect margin can be set without changing any of the other
margins, as in ⊗XJUST 7/<cr>. The command ⊗XJUST 8<cr> explicitly sets
the crown margin to 8 and implicitly also sets the detect margin to the
same value (8).
SEPARATING SENTENCES WITHIN PARAGRAPHS: ⊗XSJFILL and ⊗XSJUST
The task of rearranging sentences within a paragraph or of moving
sentences from one paragraph to another is simplified by the use of the
⊗XSJFILL and ⊗XSJUST commands. These commands separate all sentences in
the specified text so that each sentence starts on a different line. The
first sentence in each paragraph will be indented by the crown margin and
all other sentences will be indented by the left margin. Within each
sentence, the text is justified exactly as it would be by the ⊗XJFILL and
⊗XJUST commands. These commands accept new margins following the command
name just like the other justification commands.
The end of a sentence is indicated by one of the characters .?!: followed
by either two spaces or the end of the line, optionally with any of the
characters >]}")' occurring between the .?!: and the spaces or end of line.
FIGURING OUT JUSTIFICATION MARGINS FROM TEXT ON THE PAGE: ⊗XJGET
The ⊗XJGET command causes E to scan a specified section of text and to
determine the indents of crown lines and non-crown lines and the column
position of the rightmost character. This command sets these values
into the crown margin, left margin and right margin for subsequent use
by the ⊗XJUST, ⊗XJFILL, ⊗XSJUST and ⊗XSJFILL commands. ⊗XJGET normally
sets the blank-line parameter to its initial default value of -1 (which
means that all blank lines encountered during justification will be
preserved and no new blank lines will be generated). However, any
margins given explicitly in the ⊗XJGET command will override the
corresponding margins determined from the text. This command types out
the resultant settings of the margins.
By using this command one can redetermine the parameters that were used
when the text was justified, presumably at some earlier editing session
or perhaps by someone else and one can do this without having to make
the determination by visual inspection.
Here is the algorithm used by E to determine the margins from the text.
First, the length (in columns, not characters) of the longest line in
the range becomes the right margin. Second, the text is scanned to find
the first blank line. If a blank line is found, then the next non-blank
line is assumed to be a crown line and its indent is stored as the crown
margin; the indent of the following line is stored as the left margin.
If no blank lines are found within the specified text, then the indents
of the first two lines are compared. If these two indents are not the
same, the first is taken as the crown margin and the second as the left
margin. If the first two line indents are the same, these lines are
taken to be non-crown lines and the rest of the text is scanned for the
first line with a different indent; if one is found its indent becomes
the crown margin and the next line's indent becomes the left margin. If
all lines in the range have the same indentation, then that indentation
becomes both the crown margin and the left margin. The practical effect
of all of this is that one should not execute a ⊗XJGET command starting
with a line that is the last line of a paragraph (but even that is ok if
a blank line follows).
SOME TYPICAL JUSTIFICATION COMMANDS:
⊗XJUST<cr> Justify the current page (or the ATTACH buffer if in
ATTACH mode) using the current margins. The right
margin will be justified.
⊗XJU 0,4,66,0<cr> Justify the current page or the ATTACH buffer using
the new margins given. The crown lines will all have a
0 indent, the left indent for the rest of the text will
be 4, the last occupied column will be 66, and there are
to be no blank lines between paragraphs.
⊗XJFILL 8/10,10,,1<cr> Justify (left margin only) the current page,
which has been previously edited so that each paragraph
starts with 8 spaces (or a tab). Note that this command
calls for the indents of all lines (crown and non-crown)
to become the same (10) and that paragraphs are now to
be separated by single blank lines. The right margin is
unchanged since no new value was given for it.
⊗0⊗XJF ,,72<cr> Change the right margin to 72 and then type out the
margins, including the detect margin if applicable.
⊗XJGET 4<cr> Set the margins to those found by examining the entire
incore text, then set the crown margin to 4, and finally
type out the new margins.
⊗!⊗XJG<cr> Set the margins to those found by examining the current
set of contiguous non-empty lines (⊗! command). This is
a very useful command to execute before rejustifying an
edited paragraph. However, the ⊗! command is only
useful for this if you have blank lines between
paragraphs. Also, the ⊗! command is not useful as an
argument to justify commands when you have text
attached, since the ⊗! command always counts lines on
the page itself, never in the attach buffer.
⊗6⊗XJG<cr> Set the margins to those found in the 6 lines starting
at the arrow (or at the beginning of the attach buffer,
if any).
⊗!⊗XSJFILL<cr> Separate the sentences in the current set of contiguous
non-empty lines (⊗! command).
Commands for tabular material: ⊗XTABLE ⊗XTJFILL ⊗XTJUST ⊗XTJGET ⊗XTGET
(See p. 16 for basic justification information and other commands.)
Modes Command Meaning
N,A,S TABLE Line up entries in a table
N,A,S TGET Same as TJGET command (see below)
N,A,S TJFILL Justify paragraphs that begin with a table
N,A,S TJGET Get margins for TJFILL/TJUST from text
N,A,S TJUST Justify & R-align paragraphs beginning w/table
Four new commands have been added that permit one to handle tabular
material in a manner analogous to way in which normal text can be treated.
Two types of commands are provided to take care of the two classes of
input data that are most apt to be encountered, these being:
A) Tabular material that is in proper columnar alignment but that may have
missing entries.
The ⊗XTABLE command is intended for use with such material.
B) Tabular material that may not be in proper columnar alignment, but
where the entries are separated by at least 2 spaces or by TABs.
There may also be normal text associated with each tabular line which
is to be justified. Of course, in this case there can be no missing
entries.
The ⊗XTJFILL and ⊗XTJUST commands are intended for use under these
conditions.
These new Tabular commands require the specification of additional
values in addition to the C,L,R,B values specified with the ⊗XJUST and
⊗XJFILL commands. Of course, just as for these older commands, default
values may be used and only those values that are to be changed need to
be specified. Margins are specified as usual.
When new tabular-field values are to be typed, these must start with
a semicolon ";" and they are to be separated by commas. Values not
otherwise marked are taken to be field lengths, that is the string
;5,8,9<CR> is taken to mean that there are to be three columns the first
one starting with an indent as specified by the P value and with a field
length of 5 character positions, this is to be followed by a second
field of 8 character positions, then one with a field length of 9.
These values supercede the field lengths that had previously been
specified for the first three fields and if still additional fields had
been specified these are to be retained and shifted to the right or left
as may be required because of the changes to the first three fields.
When specifying changes in fields, it is only necessary to type
numbers for those fields that are to be changed and to indicate
preceding fields by commas. Fields after those typed are retained
unless the typed-in string is followed by the letter Z (for zero).
Should there be more fields specified for output than are specified for
input, E warns the user at the time of execution of the TABLE or TJ
command and ignores the extra fields; should there be fewer output
fields than input fields, the command is aborted.
When several fields are to have the same length these fields may be
specified by the use of the @ sign, thus 9@5,7 means that there are to
be 9 fields of length 5 followed by a field of length 7. Fields to the
left of a field that is to be changed may be indicated that are to be
left the skipped by the use of commas without numbers, thus ,,7 means
leave the first two columns unchanged and make the next one with a
length of 7. Similarly 4@0,3@5 means leave the first 4 columns
unchanged and make the next 3 columns with lengths of 5. Note that
zero, in this case, does not mean a column of zero length but means no
change.
Fields must have widths of 3 or more to permit a single character and
to allow for there to be two spaces between the characters in different
columns. Should any particular entry be too long for the width
specified, the next entry is automatically moved to the right so as to
preserve the desired separation between columns. Such excesses may
propagate.
A fourth command ⊗XTJGET has been provided to perform the same
function for tabular material that is performed for ordinary text by the
⊗XJGET command. It should be noted that this command must determine the
positions of each column as well as the left margins and so it must be
given when the designated text is restricted to start with a tabular
line in which there are no missing entries.
Note: The ⊗XTGET command does the same thing as ⊗XTJGET.
The specifications for these new tabular commands will be listed below.
⊗XTABLE
This command must be given either 1) after a prior execution of the
⊗XTJGET command, 2) with the entire set of tab fields specified, or 3)
after some combination of commands satisfying 1 or 2. In effect, one
must provide E with information as to the existing state of the input
textual material since there does not exist any "Normal" set of
conditions that can be assumed. While, in principle, it is possible to
provide this information by typing it in, it is thought that this task
can best be handled by E with ⊗XTJGET.
Information regarding the desired new format must also be provided
and this will usually be done by typing the needed information as a
suffixed string as described below. This information is sticky and it
need not be retyped. If there exists a sample of tabular material that
is already in the desired format even this second task may be left to E
by again using the ⊗XTJGET command as explained below. Note that the
⊗XTJGET command changes the parameters as they relate to the conditions
to be established.
This command will accept a prefix argument defining the number of
lines to be processed and a series of suffixed arguments similar in
every respect to the syntax used with ⊗XFILL and ⊗XJUST. One enters
information as to the desired tabular fields by then typing a semicolon
";" followed by a series of decimal numbers which define the field
lengths to be used. If several fields are to be all the same length the
syntax, 5@7 for example, may be used meaning in this case that there are
to be 5 fields of 7 characters positions each. Alternately it is
possible to define a field in terms of the last colmnar position that it
is to occupy by prefacing the number with an exclamation mark "!". Note
that it is not possible to specify the starting column as this is set by
the cumulative lengths of the preceding fields.
For example, the command αβ7αβXTAble 4;10,6@5,!60<CR> would specify
that there be 8 fields with the first one occupying 10 columns starting
at an indent of 4 then there are to be 6 fields each occuping 7 columns
and a final field ending at column 60. The starting indent for this
last field is obtainable by adding up the columns already accounted for
(44) and so the last field is to be 16 columns wide. Note that it is
only necessary to type a single number before the semicolon as this
commands starts all lines with the crown or new paragraph indent. The
normal left margin indent is not used and the program automatically
determines the right margin value from the accumulated column count.
This command requires information as to the existing format of the
data to be reformatted and information as to the desired new format.
The new format information can then be typed in with the ⊗XTABLE command
or it my also be obtained from an existing table (or portion of a table)
that is already in the desired format by using the ⊗XTJGET command.
⊗XTJFILL and ⊗XTJUST
As mentioned earlier these commands are for use with tabular data
that have no missing entries but do have with them some associated text
that one wants justified. The listings of commands with explanations,
as used in this manual is an example of such material. The original
material need not be aligned into columns.
The methods for specifying the various parameters is similar in all
respects to that described for the ⊗XTABLE command. Especial care must
be used in establishing these parameters particularly as regards the
number of fields. The signal for a new field is taken to be the
presence of 2 or more spaces between entries (3 spaces if the entry ends
with a sentence-terminating punctuation mark) and if the textual
material has already been justified and padded there may be cases where
these conditions are met in the associated textual material. The
program differentiates between these entirely on the basis of the number
of tabular entries that are expected and that have been found.
CAUTION: It is unwise to use ⊗XTJUST on text that one may want to
re-⊗XTJUST or ⊗XTJFILL later, since any additional spaces at word breaks
which the first ⊗XTJUST introduces will be taken as a tabular field
indicators during the execution of the subsequent commands.
⊗XTJGET
The command ⊗XTJGET determines the margin values of a designated portion
of text in a manner similar to that used by the ⊗XJGET command, except
that in addition to the crown, left, right and blanklines margins, the
positions and widths of tab fields are also set by ⊗XTJGET.
MARGIN CONTROL commands: ⊗XALIGN ⊗XINDENT ⊗→ ⊗← ⊗XCENTER
(See p. 16 for basic justification information and other commands.)
Modes Command Meaning
N,A,S ⊗← Shift line or attach buffer left by current indent default
N,A,S ⊗#⊗← Shift # lines left by current indent default
N,A,S ⊗→ Shift line or attach buffer right by current indent default
N,A,S ⊗#⊗→ Shift # lines right by current indent default
N,A,S ALIGN Align left margins of text
N,A,S CENTER Center text of given lines between margins
N,A,S INDENT Indent lines by given amount
These commands preserve the identity of the text lines while
preforming certain operations on their left margins.
⊗XALIGN moves all lines defined by the location of the arrow line and
a prefixed argument (with 1 line or the entire ATTACH buffer as the
default option) so that all lines start with a specified (or default)
indentation. The command uses initial TABs to the extent possible. The
command can take a single suffixed decimal (sticky) argument to specify
the desired indentation. The initial default value is set at 0.
The command ⊗XALIGN may be set to operate in one of two different
modes with respect to the treatmant of interior TABs. The initial
default mode is for all interior TABs to be replaced by the equivalent
number of spaces that they produced before the alignment was effected.
The other mode is entered by typing the letter T (for TAB) as a suffixed
letter (after the command name and separated from it by a space). This
mode leaves all interior TABs untouched. The mode as so changed is
sticky and applies for all subsequent ALIGN and INDENT commands. The
initial default mode may be restored by typing the letter S (for
Spaces) in an ALIGN or INDENT command.
INDENT simply moves the specified number of lines (default is 1 line
except that in ATTACH mode the default is the entire ATTACH BUFFER) to the
right or left by the specified amount independent of their original
starting positions. This permits blocks of code to be moved right or left
while preserving their original relative indentations. INDENT will takes
one suffixed numerical argument specifying the desired indentation, (a
positive number if to the right or a negative number if to the left).
Motion to the left is limited by the edge of the page but there is no
practical limit to the motion to the right so take care when changing the
indent value. The initial default indent value is 4. See the above
paragraph for the handling of interior tabs by the INDENT and ALIGN
commands.
The commands ⊗→ and ⊗← are special cases of INDENT. They move the
specified lines to the right or left by the (absolute) amount that had
been set previously by the ⊗XINDENT command. The default number of
lines is one if not in ATTACH mode or it is the entire ATTACH buffer,
and the initial default indentation is 4. Unlike ⊗XINDENT, these arrow
commands do not require a ⊗X or a carriage return. Like ⊗XINDENT they
limit the text motion to the left edge of the page. These commands do
not take suffixed arguments.
Typical commands.
⊗XALIGN<cr> ALIGN the earrow line (or entire ATTACH buffer if in
ATTACH mode) with all lines moved to start with the
default ALIGN indentation (originally set to 0).
⊗4⊗XALIGN 5<cr> ALIGN 4 lines starting with the arrow line (or with the
start of the ATTACH buffer if in ATTACH mode) so that they
are indented by 5.
⊗XINDENT<cr> INDENT the arrow line (or the entire ATTACH buffer if in
the ATTACH mode) by the default value (set to 4
initially), but do not let any line move far enough to the
left to lose any non-space characters.
⊗8⊗XINDENT 3<cr> INDENT 8 lines starting with CURRENT by 3, that is, move
the 8 lines to the right by 8 positions, with the new
default value being set to 3.
⊗6⊗XIND T 3<cr> INDENT 6 lines, starting with the arrow line, by 3 after
changing the mode so that interior TABs are kept as TABs.
⊗6⊗XINDENT -3<cr> INDENT 6 lines starting with CURRENT by -3, (that is
move them to the left by 3 positions).
⊗→ Move the CURRENT line or the ATTACH buffer contents to the
right by the previously established amount.
⊗← Move the CURRENT line or the ATTACH buffer contents to the
left by the previously established amount.
⊗6⊗→ Move 6 lines starting with the CURRENT line or with the
start of the ATTACH buffer to the right by the previously
established amount.
⊗XCENTER centers all lines defined by the location of the arrow line
and a prefixed argument (with 1 line or the entire ATTACH buffer as the
default option) so that all lines are individually centered between the
left and right margins as previously specified for the ⊗XJUST or ⊗XJFILL
commands, or desired values may be typed with the center command itself
and these new values will then be the default values for the ⊗XJUST and
⊗XJFILL commands. See these other commands for full details.
The command uses initial TABs to the extent possible. Interior TABs
are replaced by spaces before the centering is effected.
Other EXTENDED commands: ⊗X<cmd> ⊗Xα<cr>
Modes Command Meaning
N,A,E ⊗X Enter eXtended command next
N,A,E ⊗Xα<cr> Load line editor with previous extended cmd line to retry
N,A AL Change your job's ALIAS
N,A ALIAS Change your job's ALIAS
N,A,E AUTOBURP Set or read autoburping threshold
N,A,E BEEPME Beep the user's terminal now
N,A BLOAT Add extra records of nulls to current page
N,A BURP Burp current page of extraneous records of nulls
N,A,E CHECK Enable free storage checking within E
N,A CLOSE Close the file, but allow further editing
N,A CORCHK Try to core down if possible (done automatically)
N,A,E DDTGO Call RAID, if available (ERAID only)
N,A,E DFIND Run FIND program on another job to do file search
N,A DPYALWAYS Update the display after every command
N,A DPYSKIP Only update the display when no typeahead
N,A,E ECHO Turn on/off echoing of text edited in line editor
N,A,E EMPTY Move to next empty line on page
N,A LINCNT Type length of current line, plus more info
N,A,S MAIL Mail a message to someone
N,A,E NONEMPTY Move to next non-empty line on page
N,A OPEN Open the current file in Read-Alter mode
N,A PPSET Ensure that the page printer is positioned ok
N,A PROTECTION Set or read the protection key of the file
N,A,E QUIT Exit to monitor without writing out the file
N,A READONLY Disallow changing the file
N,A READWRITE Allow changing the file
N,A,S REMIND Enter a REMIND-system reminder
N,A SAVE Write out incore page(s) in E$SAVE.TXT
N,A,S SEND Send a message to someone logged in
N,A,S SIN Replace tabs with equivalent numbers of spaces
N,A,S SPOOLC Spool incore page(s) on the line printer
N,A,E TELLME Report the latest commands to person maintaining E
N,A,E TERSE Enter terse mode--suppresses some typed info
N,A,S TIN Replace multiple spaces with equivalent tabs
N,A,E TMPCOR Write out (now and on exit) TMPCOR file used by E
N,A,E VERBOSE Enter verbose mode--types out extra info
N,A,E WRITTEN Type out who previous wrote the file and when
N,A,S XSPOOL Spool incore page(s) on the XGP
Certain commands are either potentially too dangerous to be safely
evoked by a single character or too rarely used to waste a
single-character command on. There are also more commands than can be
obtained with single characters. These contingencies are handled by the
EXTEND command specified as follows:
⊗X Execute the following extended command, which starts with
the command name and normally ends with a <cr>. The
command name may be abbreviated as long as no ambiguity
results. The command name must be terminated by a space
if parameters follow it, or by a <cr> or some other
activating character.
⊗Xα<cr> Load the line editor (displays only) with the last ⊗X command
line typed (whether valid or nor), to let you edit it and try
again. The α and β bits that you get on the edited command
are precisely what you type on the X in ⊗Xα<cr>; also any
numeric arg typed to the ⊗Xα<cr> is applied to the edited
command. This command is a no-op when executed inside a macro
or on a non-display.
Some EXTENDED commands (usually ended with carriage return):
⊗XALIAS <project>,<programmer>
or
⊗XAL <project>,<programmer>
This command can be used to change your alias PPN. It
takes a following text argument in exactly the same form
as the system ALIAS command: 1) PRJ to set project to PRJ
and programmer to logged in name, 2) PRJ, to set project
to PRJ and retain previous alias programmer name, and 3)
PRJ,PRG to set both project and programmer. Note that
this command cannot be abbreviated beyond ALIA. This
command types out your new ALIAS on both the current piece
of paper and PP 0 so that you will see your changed alias
when you exit.
⊗XAUTOBURP This command can be used to set or read the threshold
number of records of nulls for autoburping. If no numeric
arg is given, E will simply type out the current threshold.
A positive arg to this command sets the threshold to that
many records. A zero or negative arg disables autoburping
entirely. An arg of just "+" sets the threshold to its
default value, which is currently 19. While autoburping is
disabled, the header line will display "/-A" after the
filename. (A page to be written out that has the threshold
number of records of nulls, or more, will be automatically
burped to delete all records of nulls from that page.)
⊗XBEEPME Beep me now. This may be typed ahead whenever desired and
you will be beeped when this command is reached.
⊗#⊗XBLOAT Write out the current page with at least # records of nulls
to provide space for text to be added later. This command
is useful if you are preparing to add a lot of text to a
page and you don't want E to have to ripple every time you
need one more record for the page's text. If you have the
last page of the file in core, then this command will not
write out any extra records of nulls since they aren't
needed to avoid rippling. If you have more than one page
in core, the extra space is allocated to the last incore
page. This command disables autoburping if # exceeds the
current autoburp threshold, in order to avoid having the
new bloatedness autoburped away in the near future.
⊗XBURP Write out the current page and in the process reduce the
disk space for that page to a minimum by deleting any
all-null records from the current page.
⊗XCHECK Enable checking of free storage (currently the default);
⊗-⊗XCHECK disables free storage checking; ⊗0⊗XCHECK
reports the current condition of free storage checking.
Macros which are to be executed many times (e.g., 100 or
more) will often be executed significantly faster if free
storage checking has been disabled. It is recommended,
however, that free storage checking normally be left
enabled (except when you are repeatedly executing a macro)
because internal E errors are detected much faster that
way, with less chance for clobberage of your file.
⊗XCLOSE Close the file. This allows others to read it if you had
modified it.
⊗XCORCHK Make E try to core down if possible. There may be
certain situations where E doesn't automatically core
down as much as possible immediately, but this
command will force it to core down if appropriate.
Users NEVER REALLY NEED to use this command.
⊗XDDT Branch to RAID if it is present. αP returns.
⊗XDFIND Starts up the FIND program on another job and passes it
the entire extended command line (starting with the DFIND)
to have it search a given file for some string(s). When
the FIND program finishes, it will report the results of
the search by typing out a special message on the
initiating terminal. This can be useful for having FIND
look up a suspected word spelling in the unabridged
dictionary (the default file to search); however, note
that searching the unabridged dictionary takes about 12.5
seconds of (wholine-type) runtime. You can use DFIND to
search any given file by using the standard syntax of the
FIND program, which is documented in FIND.DON[UP,DOC].
(Note that you cannot run the FIND program with command
FIND or OFIND; only the DFIND command is available for
running the FIND program from E.)
The ⊗XDFIND command starts up a phantom job to do the
search, and a summary of the results are sent to your
terminal. The summary includes the number of hits, as
well as the first, last, and (if different) shortest "hit"
lines. The syntax of the DFIND command in E is the same
as that of the monitor command, with the same defaults for
the WITHIN, OMIT, and IN clauses. (If you specify a
WITHIN other than the default of WITHIN LINE, only the
lines containing the hit will be reported. This isn't
quite the same as WITHIN LINE, since a text unit
containing several matches yields only one hit.)
If you type just ⊗XDFIND<cr>, the current line of text (or
the first line of attached text, if any) will be used to
specify the search parameters.
⊗XECHO Turn ON the echoing of text edited in the line editor
(displays only); this is the default mode. The command
⊗-⊗XECHO turns OFF echoing of text edited in the line
editor, but causes the activator of such edited text to be
typed out so that you can tell what it is (although this
typeout will occur late since it is done by E, not the
system). The command ⊗0⊗XECHO reports the current state
of echoing.
⊗XFIND Do a search or substitution; see p. 13 for details.
⊗XGORPG Exit from E and repeat the last RPG command.
⊗XJUST Justify the current page (or the ATTACH buffer if in ATTACH
mode) using the default values for the paragraph, left and
right margins. Margins are initially set to 1,1,69. For
elaborations on this basic command, see p. 16.
⊗XLINCNT Type out (1) the number of the current line, (2) the
number of lines on the current page, (3) the number of
columns in the current line, (4) the number of characters
on the page, (5) the current page number, and (6) the
number of lines attached, if any.
⊗XMAIL <destinations and switches>
or
⊗XSEND <destinations and switches>
or
⊗XREMIND <destinations and switches>
Execute a system MAIL, SEND or REMIND command using text
from the current page or attach buffer. If a numeric arg
is given with any of these commands, only that many lines
of text are included in the message. Leading blank lines
are excluded from the text given to MAIL (in order to make
the ⊗! command useful for specifying the range of text).
If a zero arg is used, a one-line message can be sent
entirely from the ⊗X-command line (no text from page or
attach buffer sent). For example, ⊗0⊗XSEND ME Hey, it
really works!<cr> will send ME the message "Hey, it really
works!" You can also use the command line to include a
subject or an initial text line ahead of the message text
being output from the page (or attach buffer). That is,
⊗!⊗XMAIL/SUBJECT PRG Sending mail from E<cr> will mail the
current paragraph to PRG with the subject "Sending mail
from E".
These commands are executed by starting up another job
running the MAIL program. When that job finishes, it will
type out a message on your terminal reporting the success
or failure of the command. Detailed information on
failure is not given.
When there are no job slots for E to start up a MAIL job,
mail sent from E is queued (by writing it into a special
file on RMD,SYS which will get processed later
automatically). You are told when this is happening, and
you will eventually be notified of the success or failure
of the mail delivery.
Also, whenever the MAIL program detects an error in mail
coming from E, it will mail the whole message and command
back to the sender with an appropriate message prefixed to
it.
See Appendix 4 in the Monitor Command Manual for full
details on the form of switches and destinations for these
commands.
⊗XOPEN Open the current file in Read-Alter (RA) mode (not legal
in Readonly mode). You should only use this command if
you intend to make some change to the current file, since
such opening of the file in RA mode will update the
date/time written to the present. THIS COMMAND IS NEVER
NEEDED -- E will open the file in RA mode automatically
when you first try to write out a page -- but ⊗XOPEN is
useful if you intend to make some changes to a file and
you want to make sure that when you actually do write out
a page, no one reading the file will cause you to get the
ENTER FAILED message that leaves you talking to the
monitor with only two alternatives: CONTINUE to try again
and REENTER to write out the incore text in your
E$SAVE.TXT file. Note: If you use ⊗. (or any other
command that implies ⊗.) without having done a ⊗XOPEN,
then you still will get kicked out to the monitor if the
file is busy.
The ⊗XOPEN command first finds out if anyone else is
already using the file. If so, then ⊗XOPEN will fail and
report who is using the file. If you think someone else
might be using the file, then use the ⊗XOPEN command
instead of the ⊗. command.
With a zero argument, ⊗0⊗XOPEN simply tells you who else,
if anyone, is using the file that you are currently
editing. That is, the zero argument suppresses the actual
attempt to open the file, but it tells you whether you
could open the file successfully if you wanted to.
⊗XPROTECTION Type out the protection key for the file being edited.
⊗XPROTECTION nnn Change the protection of the file being edited to the
octal value nnn. Only 3 octal numbers may be given. An
attempt to change the protection of a file that is
protection protected againt the user will not work.
⊗XREADONLY Inhibit any further writing of the file. You can leave
readonly mode with the ⊗XREADWRITE command (if the file is
formatted). If you try to write out a changed page while
you are in readonly mode in a formatted file, E will
demand that you respecify the mode (readonly or readwrite)
that you want. If you choose readwrite, the changed page
will be written out.
⊗XREADWRITE Enable writing (modifying) the file. The file must be
formatted for this command to work. However, if you are
editing a one-page unformatted file, this command will
still work by changing you to /N mode (no directory on the
disk).
⊗XXSPOOL
and
⊗XSPOOL These commands spool on the line printer and XGP,
respectively, the current page, or the ATTACH buffer if
something is attached, without writing it out in the
current disk file. If a numeric arg is given for either
of these commands, only that many lines of text are
spooled (they are spooled from the attach buffer if
anything is attached). This allows you to spool a copy of
changes that you have made whether or not you intend to
incorporate them into the disk copy of the file that is
being edited. The spooled copy carries the same header
information as it would have carried had it been spooled
in the usual way. For spooling on the XGP (⊗XXSPOOL
command), the default font and page margins are used.
⊗XSIN Put Spaces IN, in place of TABS, for example, so that the
actual spacings will be preserved when extra characters
are added ahead of TABs. This command may take a prefixed
argument specifying the number of lines to be operated on.
Without an argument it is applied to the entire page or to
the entire ATTACH buffer.
This command will, of course, increase the space occupied
by the text on the disk. The inverse command, ⊗XTIN,
should be used to replace spaces by TABs, and then, this
should be followed by an ⊗XBURP before saving the page.
Note that TIN will not restore previous tabs that took up
only one space.
SINning without TINning and BUrping is bad.
⊗XTIN Put Tabs IN, in place of spaces, when this will result in
a net saving in the space occupied by the text on the
disk. Extra spaces and/or TABs at the end of lines are
also deleted. No change is made in the way the text is
displayed. This command may take a prefixed argument, to
specify the number of lines to be processed. Without an
argument it is applied to the entire page or the ATTACH
buffer. The inverse command is ⊗XSIN; however, SIN will
not restore tabs and spaces at the ends of lines.
While this command reduces the number of spaces used in
the text, it does not necessarily reduce the space that
the text will occupy on the disk. The command ⊗XBURP
should be used after the ⊗XTIN command, for this purpose.
monitor command REENTER
or
⊗XSAVE Write out the current incore page(s) and any attach buffer
in the file E$SAVE.TXT on your LOGIN disk area. This is
done automatically for almost all fatal errors detected by
E; when it happens as a result of such an error, a message
to that effect is typed out. (The file E$SAVE.TXT may NOT
be written out successfully if the error is detected again
while writing this file.) Note that any previous
E$SAVE.TXT file is superseded (replaced) by the new file.
Note also that this command (and its automatic call upon
error detection) does NOT touch the file you currently
have open for editing. Whenever the E$SAVE.TXT file is
written, E's TMPCOR file is also written so that the
monitor command ET<cr> will get you back to that point.
⊗XTELLME Make a standard "E error report" to report the last
several commands executed and some internal E data.
This command should only be used if you think you have
just seen a bug occur in E. This command provides
valuable information for tracking down possible bugs.
If you use this command, you should shortly afterward
mail a message to the E maintainers (BUG-E) explaining
what sort of bug you think you just saw.
⊗XTMPCOR Write out the TMPCOR file now to remember the current
state of the edit stacks. Also, this also causes the
TMPCOR file to be written out whenever you subsequently
leave a file, as if you had given as standard E monitor
command originally. This is sometimes useful to remember
your place if you did something funny originally that
normally inhibits use of the TMPCOR file (like, saying "R
E;<file>" instead of "ETV file"). See the description of
what goes in the TMPCOR file on p. 20.
⊗XWRITTEN Type out the date and time at which the current file was
previously written and the PPN and jobname of the person
who did it. This information is saved even after you have
modified the file, that is, even after the system has lost
this data; however, once you switch away from a file this
data is lost for that file.
⊗XTERSE
and
⊗XVERBOSE E can be in any one of three possible report states. The
reporting state determines how much information E types
out a various times. The three states are: (1) the
normal default state, (2) a verbose state achieved by the
command ⊗XVERBOSE and (3) a terse state achieved by the
command ⊗XTERSE. The normal state can be restored by
giving either ⊗-⊗XVERBOSE or ⊗-⊗XTERSE. You can find out
the current state by giving either ⊗0⊗XVERBOSE or
⊗0⊗XTERSE. The normal state now does somewhat less
reporting (that is, less typeout) than formerly. No error
messages are ever suppressed by the terse state.
The following remarks are currently suppressed only in the
Terse state.
Only one MARK and you are there!
There are no marks!
Already marked!
Not marked!
All marks have been cleared.
Removing last MARK on this page.
MARKS on this page only have been cleared.
Page is empty. (⊗XNDFAIL, ⊗XNDSAIL cmds)
Aborting macro ... (error occurred in macro)
Abort of # macros requested from ... (⊗#⊗XABORT cmd given)
No lines broken (⊗XBREAK command).
Free storage checking is now disabled/enabled. (⊗XCHECK)
Deleted text saved up to nnnn chars. (⊗-⊗#⊗XUNDELETE)
Calls on stack deleted for macro ...
Using symbol pair .. (⊗XPAREN)
Searches will now match only exact (ignore) case of letters.
Current file record shifted to 0, rest flushed.
Fileswitch list full -- replacing FILE.EXT
The following remarks are typed out only in the Verbose
state.
N characters added/removed (justify commands)
Line now has N chars. (join)
You have replaced XXX with YYY (substitute)
(detailed info of the parenthesis commands)
The new line of N chars lists M items (⊗XNDFAIL/SAIL commands)
Calling ... (calling a macro)
Ending ... (a macro has finished)
⊗XNONEMPTY
and
⊗XEMPTY Move to the next empty or non-empty line. A repeat
argument will cause these commands to look for that many
empty or non-empty lines. A negative arg will cause the
search to go backwards. A positive arg (or default of 1)
will ignore the current line and search from the next
line, but will not cross a subsequent incore pagemark;
hence the search is of only one page. These commands can
also be used, both inside and outside macros, to tell if
the current line is empty--use a zero arg: ⊗0⊗XEMPTY is a
no-op if the current line is empty, but will generate a
SORRY-type error otherwise; ⊗0⊗XNONEMPTY is a no-op if the
current line is non-empty, but will generate a SORRY-type
error otherwise. An incore pagemark and the end of the
incore page are considered neither empty nor non-empty
lines by these two commands, so the ⊗0 argument forms of
both these commands will generate an error when pointing
to such an end-of-page "line".
⊗XDPYALWAYS Always re-display text after each command.
⊗XDPYSKIP Don't re-display text if there are typed-ahead commands to
be executed. (normal mode)
⊗XPPSET Reset screen position of page printer (the three lines at
the bottom of the screen which echo commands).
⊗XQUIT Exit WITHOUT writing out to the disk any text changes.
All other commands that exit write out any changes first.
System commands and file SWITCHES.
(See also "Filenames, numeric extensions, and filehacks" on p. 31.)
There are five main monitor commands available that run E in
various modes (for the first file edited). These monitor commands
are: ETV, EREAD, CETV, READ and BOOK. All of these commands restore
(upon startup) the list of the last few files you have edited along
with related information about each file. When you exit from E, this
information is saved in a TMPCOR file (see details below) for later
restoration. The meanings of these monitor commands are as follows.
ETV Edit a file normally.
EREAD Edit a file in readonly mode. An E command is available to
change from readonly mode to readwrite mode. In readonly mode
you cannot change the file. See the /R switch later.
CETV Create a new file with one empty text page and begin editing it.
See also the /C switch. If no filename occurs with this command,
then the result is the same as if you had said ETV, not CETV.
If you want to create a new file without a directory, then use
the CETV command with the /N switch following the filename.
READ Read a documentation file. This command will attempt to find
the file on one of several system documentation disk areas and
will then edit it in readonly mode. See also the /D switch.
BOOK Read a book file. This command provides for keeping your place
in the book over long periods of time (while you read it) but
always edits the book in readonly mode without letting you
change to readwrite mode. See also the /B switch.
Any of these monitor commands can be followed by zero, one, or
more filenames. If no filename is given, then E edits the last file
previously edited. If one filename is given, that file is edited.
Two filenames can be given to have E copy one file to another and
then edit either file; a left- or right-arrow is placed between the
filenames to indicate which file is to be copied, with the first file
listed always being the one edited. Additional filenames can follow
the initial one (or two), preceded by commas -- such filenames
indicate files to be placed on E's file stack for editing later; this
mechanism is mainly used by E itself to remember the last few files
edited but is also available to the user for entering several
filenames.
Any filename can be followed by switches that tell E the mode(s) in
which to edit the given file. Also, if the first filename is omitted,
switches can still be inserted where that filename would be; such
switches apply to the last file previously edited (which will be edited
again). The available switches are explained later.
One more monitor command can be used to run E. This one is different
from those listed above in that the use of it suppresses the normally
automatic remembering of the names of files edited.
R E; Run E but don't restore information about previous files edited
and don't remember information about current files edited.
This command has little usefulness, especially since E normally
remembers not just the last one, but the last three files you
have edited. Note that the filename(s) must be preceded by a
semicolon.
THE TMPCOR FILE -- SAVING AND RESTORING YOUR
EDITING STACKS, LINE MARKS, AND MODES
If you run E normally (by using any of the monitor commands listed
above except "R"), then when you exit, E saves information about the files
you have been editing. (Actually, the information is saved each time you
leave a file, not just when you exit.) When you return to E with one of
the same monitor commands, this information is restored. The information
is remembered in a TMPCOR file (a temporary file in system core that goes
away when you log out). When you leave a file, E remembers the names (and
stack positions) of the top three files in your file stack, and for each
file remembered, E also remembers the following: (1) the top part of the
page stack (including the final page, line and window position), (2) all
line marks, and (3) the current modes, including the settings of the /R,
/N and /F switches. If auto burping is disabled, this fact is also
remembered in the TMPCOR file; note that the state of auto burping is
global to all files edited.
When you return to E with one of the standard E monitor commands,
the TMPCOR file is read and the information there is stored by E
internally so that if you edit any of the same files again, the stacks,
line marks and modes for that file are restored to their previous
values. For example, when you give the "ETV<cr>" monitor command with
no filename, E will edit the last file you were in and restore the
saved information for that file; in particular, E will start up editing
the file at the same page and line where you were when you left that
file. Also, if you return to E with the monitor command "ETV
<filename><cr>", and if the file named was remembered in the TMPCOR
file, then the saved information for that file will be restored. In
either of these example cases, other remembered files will have their
corresponding data saved, and the files will automatically be entered
in E's file stack; switching to such a file will cause the saved
information about that file to be restored.
Whenever you edit a file by explicitly giving that file's name
(with or without an explicit filename extension), the state of the /R
flag is determined by the command you gave rather than by the previous
state of this flag. If you edit a file without giving its name
explicitly, the /R flag is restored to its previous value unless the
command itself specifies a particular state for the /R flag (e.g.,
both the ⊗λ command and the EREAD monitor command specify /R).
SWITCHES
A switch consists of an optional decimal number followed by a single
letter, all either preceded by a slash or enclosed in parentheses. Any
number of switches may follow the filename that the switches are to
modify. The infinity character "∞" may be used as the decimal number
for a switch, as in /∞F; "∞" represents a large positive value. Using
a number of 0 in any switch is exactly equivalent to omitting the
number completely. Some switches actually take two decimal numbers,
separated by a comma -- for example, /3,5M. In such cases, if the
second number and the comma are omitted, zero is used for the second
number (which is usually a line number).
Here are a couple of equivalent commands.
ET E.ALS/R/7P/2L ET E.ALS(R7P2L)
Switches are NOT ALLOWED in front of a filename. "ET /R FOO" is illegal.
The available switches are listed below. The inverse of any switch
can be specified by inserting a minus sign "-" between the slash
and the letter, as in /-R. This is useful when you want to override
a positive switch default.
Note that if two switches specify conflicting conditions, the latter
switch overrides the switch occurring earlier.
/C Create a new file with the specified name. This is of
most use when one wishes to create a new file with
the file switching command ⊗ε, perhaps to hold some
attached text from the current file. If you want
the newly created file NOT to have a directory,
then use both /C and /N.
/R Open the file in the read-only mode. This is useful
if one wants to examine a file without any danger
of inadvertently modifying it. For example:
ETV TEACH.TXT[UP,DOC]/R<cr>
You can leave read-only mode by using the ⊗XREADWRITE
command. You enter read-only mode with ⊗XREADONLY.
/B Book mode. Edit the file in book mode. In this mode
you are never permitted to alter the file nor are you
permitted to leave this mode. See the explanation of
book mode on p. 29.
/N No Directory. Edit the file without writing a directory
on page one. The directory must be generated from
scratch and the file reformatted each time you edit
the file. The directory is kept in core by E but
never written in the file. To force E to put a
directory on a file that you have edited /N (or any
file that simply has no directory page), edit the file
with the /Q switch (and omit the /N switch of course).
/F Repage and reformat the file with the maximum page size
limited to the default value of 33 (one screenful on
Data Disc terminals). The F may be preceeded by a
decimal argument to use any desired number instead of
33. Old page marks are retained, so it is not
possible to increase the page size by this switch and
some pages may be shorter than the specified length.
This switch is particularly useful for getting long
unformatted files into a shape where they can be
handled safely and easily. Also, when this switch is
used with an argument of infinity ("∞"), the effect
will simply be to reformat the file, during which
process E "burps" the file by removing unneeded nulls
(except from the directory page).
/F/R (This is a combination of two switches.) Repage and
reformat the core version only without changing the
disk copy. The new directory will be on page 0 and
the old directory (if there is one) will be kept as a
part of the text starting on page 1. Do not try to
use the old directory as it is invalid. This switch
combination is particularly useful for examining
(without altering) unformatted files that have been
produced by programs other than E.
/nX Reformat the file and bloat each page (except the
directory and the last page) by # records of nulls
(after discarding previous records of nulls (except on
the directory page)). This switch also disables auto
burping. Thus this switch is useful when you are
about to perform a large amount of editing which might
have otherwise caused rippling several times. If the
number n is omitted (i.e., "/X"), then the default
bloat amount is used, which is currently 3 (records).
The bloat amount is limited to prevent the resulting
file from becoming bigger than 256K or more than twice
its previous size; however, since this switch can
still make a file very big, care should be taken to
avoid wasting disk space unnecessarily. Note that you
can unbloat (i.e., burp) a file with /∞F.
/nA Set the auto burp threshold to n records of nulls. If n
is omitted, auto burping is enabled with the default
threshold. The switch /-A disables auto burping. The
effect of this switch is global; i.e., it applies to
all files edited until changed by another /nA switch or
by the ⊗XAUTOBURP command (which see). While auto
burping is disabled, the header line will display "/-A"
following the filename.
/nP Open the file at page n, where n is a decimal number.
/mL Open the file with the arrow at line m (m is decimal).
/x,yZ Open the file at page x and line y.
/E Open the file at the End of the last page.
/nE Open the file at the End of page n (decimal).
/S Open the file at the Same page and line the last file
was open at.
/nW Open the file with the window initially positioned so
that line n of the initial page is at the top of the
screen. This does not affect the initial setting of
the arrow line, which has priority over this switch.
Therefore E will not obey the /nW switch if it
conflicts with the starting line number.
/Q Quietly assume a Yes answer to any questions E would
otherwise ask about formatting or replacing an
existing file or about discarding any invalid or
undesired directory.
/x,yM Place a line-mark on page x at line y. Note that this
switch takes two decimal arguments separated by a
comma. See the line marking commands on p. 8. This
switch is a no-op when switching to the ? file or to a
file that you have already been in because previous
line marks in such a file are restored automatically.
/x,yO Push the position consisting of page x and line y on
the page stack for this file. This switch also is a
no-op when switching to the ? file or to a file that
you have already been in because the previous page
stack in such a file is restored automatically.
/D Search the system documentation disk areas for the file
specified and then edit in Readonly mode whatever file
was found. Thus you don't need to specify either the
extension or the PPN of documentation files. If no
extension is given, then files with extensions other
than UPD will be found before UPD files. However, any
explicit extension, project, or PPN given will be
observed. If an extension is given but no PPN, E will
look for the particular file on any of the
documentation areas. If a project is given, say PRJ,
then E will look for the file on [PRJ,DOC]. If a
programmer name is given, then no searching of
documentation areas will be done and normal PPN
scanning applies and the /D will merely force the file
to be edited in Readonly mode. The monitor command
READ runs E and implies /D. Here are some examples of
the monitor command READ and the /D switch.
READ UUO Edits the UUO Manual file in readonly mode.
READ UUO.UPD Edits the update file for the UUO Manual in readonly mode.
⊗εMONCOM/D Switches to the Monitor Command Manual in readonly mode.
READ NOTICE/E Edits the NEWS program's text file of notices in readonly
mode, starting at the End.
/-U Suppress updating the directory whenever possible. In
particular, this switch is the DEFAULT when you are
editing SOMEONE ELSE'S MESSAGE FILE (on 2,2 -- this
default does NOT apply to MSG.MSG files, but an explicit
/-U will work on such files). Thus if you go edit a
message that you sent someone, your edit will not screw
up his "place" in the file because E will retain the
non-updated directory for him.
The maintaining of the owner's "place" (last previously
existing page) in the file works under virtually all
conditions of editing a file in /-U mode, even if it
ripples or if you burp it -- however, autoburping is
never done while in /-U mode. Although the /-U switch
is not displayed to the user, its presence will be noted
(on displays) when you write out a page -- the "U" flag
on the header line will appear (or not disappear if it
was already there) if the incore version of the
directory didn't get completely written on the disk.
One particular effect of /-U mode is that changing the
first line of a page will not force the directory to be
written out (although it will still cause the "D" to
appear in the header, and when the page is written out a
"U" will appear in place of the "D"); thus the directory
can become inconsistent with the TEXT of the first line
of each page (and if you leave such a file without doing
an ⊗XUPDATE and come back to that file later, E won't
know that the directory does not reflect the actual
first line of each page). However, the record numbers
on the directory page are NOT allowed to become invalid
or inconsistent. As usual, the ⊗XUPDATE command will
write out the directory (if necessary to update the disk
version), and in addition, this command will take you
out of /-U mode.
The default /-U mode that occurs when editing another
person's message file cannot be overriden with the /U
switch; you must actually give the ⊗XUPDATE command to
leave /-U mode, but YOU SHOULDN'T DO ⊗XUPDATE WHILE IN
SOMEONE ELSE'S FILE. (The /U switch has no use except
to override an earlier /-U switch in the same command
line!)
The /-U switch applies only to the file with whose name it
is given, and then only until you switch to another
file (unless /-U is given again). That is, it is NOT
a permanent mode, even for the particular file.
NEED TO REFORMAT FILE, or WOULD YOU SETTLE FOR /R MODE, or FOR /N MODE?
If you try to edit, in readwrite mode, a file that does NOT have a
valid E directory and that does have more than one page, E will tell you
that the file needs to be reformatted and will ask if that is OK. If you
say Yes (just Y), then E will format the file and add a directory page at
the beginning of the file. If you say No (just N), E will ask if you will
setting for editing the file in readonly mode (/R) (for which E does not
need a formatted file). If you say No to each of these questions, E will
ask for a new filename. If you type <altmode> in place of Y or N for any
question, E will not ask any more questions but will immediately let you
give a new filename.
To either of the Yes or No questions about formatting, you can respond
/R to tell E to edit the file in Readonly mode, or you can respond /N to
tell E to edit the file in No-directory mode. Like the normal responses
(Y or N), the special responses /R and /N do NOT take a carriage return.
When you try to edit a one-page directoryless file not in /R mode, E
will NOT ask you about formatting the file (provided the file contains no
rubouts). Instead, E will automatically open the file in /N mode, but
WITHOUT RECOPYING THE FILE. This works for one-page files because they
are always formatted properly (each page beginning on a record boundary).
This free /N feature for one-page files is suppressed if E finds any
rubouts (octal 177) in the file; this is to prevent accidental clobberage
of special files written by non-editor programs, since E normally
discards 177s on input.
DIRECTORY ERRORS DETECTED WHILE EDITING A FILE
If E detects any inconsistency between a file's directory and the location
of individual pages in the file, an error message will be typed out. If
the user is in /R mode, he will be allowed to continue reading the file
(but will not be permitted to change it). If the file is not being edited
in Readonly mode, then the directory error will cause E to stop (with its
usual saving of incore text in E$SAVE.TXT). Directory errors SHOULD never
occur, unless perhaps the file has been messed up with some program other
than E or unless there is some problem with the disk.
Using E from a non-display (TTY). XTYPE XNUMBERS XHEADER XTRAILER XCONTROL XMETACONTROL
Modes Command Meaning
N,A,E CONTROL Make next cmd char have only the CONTROL bit
N,A ENTER Switch to given file in READWRITE mode
N,A EPSILON Switch to given file in READWRITE mode
N,A,E EXIST Type out fileswitch list
N,A HEADER Type out the header line (from top of window)
N,A LAMBDA Switch to given file in READONLY mode
N,A LOOKUP Switch to given file in READONLY mode
N,A,E METACONTROL Make next cmd char have both META and CONTROL bits
N,A,E MSG Operate on current message with next command
N,A,E NUMBERS Enable or disable typing of line numbers with text
N,A,E PARTIAL Operate on current message with next command
N,A TRAILER Type out the trailer line (from bottom of window)
N,A,S TYPE Type out line(s) of text
It is possible to use E from a non-display terminal. Of course, some of
the advantages of E over, say, SOS are lost but one may not want to go
to the trouble of having to switch editors in mid-stream. As partial
compensation for the lack of display features, E provides the
non-display user with optional line numbers. See the MONITOR COMMAND
MANUAL sections 3 and 4.7 for other information of interest to
non-display users.
No special action is required of the non-display user to tell E that
a non-display is being used. E figures that out automatically.
An important and useful command on non-displays is ⊗XTYPE, which
types out a number of lines.
⊗#⊗XTYPE<cr> Types # lines starting at CURRENT and moves CURRENT
past those lines. If # is omitted, 10 lines are
typed if on a non-display terminal, but only 1 line
is typed if on a display terminal (useful for seeing
long lines that go beyond right edge of display).
The following command can be used to enable or disable the typing
of a line number and tab at the start of each text line typed out.
⊗XNUMBERS<cr> E lets you select whether or not you want line numbers
typed out. The command ⊗XNUMBERS enables typing out
line numbers and the command ⊗-⊗XNUMBERS disables
typing line numbers. In ⊗-⊗XNUMBERS mode on a
non-display, when you go into line insert mode, E types
out a once-only prompt and tells you the line number of
the first line you are about to insert. The current
initial default is ⊗-⊗XNUMBERS (no line numbers). The
command ⊗0⊗XNUMBERS restores the line numbers mode to
its initial default (currently ⊗-⊗XNUMBERS).
Here are some arguments for using each mode:
XNUMBERS: In this mode you always know where you are on a page; and
when you are in line insert mode, you get a prompt (of the
line number) to remind you that you are inserting text.
Blank lines are obvious because of the leading line number,
unlike in -XNUMBERS mode where a blank line of text typed out
may go unnoticed.
-XNUMBERS: In this mode, typeout of lines is a little faster, since the
leading line number and tab are omitted. Also, the resultant
typeout of each line is 8 spaces shorter, thus making fewer
long lines wraparound on each given-width terminal.
Furthermore, in line insert mode, a one-time prompt tells you
at what line number on the page you begin inserting text, and
the text that you insert is flush with the left margin. Thus
a ↑U (clear input line) command to the monitor (which puts
you back at the left margin on the next line) leaves you
still properly lined up with text from previous lines.
The ⊗XTRAILER and ⊗XHEADER commands type out the header and trailer lines,
respectively, which normally delimit the window of text shown on display
terminals. These commands are useful on non-displays for getting some of
the information that is not otherwise obtainable, such as the record and
character counts at the end of the trailer line and the mode letters at
the end of the header line. These lines contain dots (...) when there are
more lines beyond the current window in the given direction and stars
(***) when the window includes the last line in the given direction. Note
that the line number (if any) typed out by ⊗XHEADER is the line number of
the first line in the window, NOT the line number of the current line.
The ⊗XTRAILER command types the number of the current ("arrow") line.
TYPING COMMANDS FROM NON-DISPLAYS:
Initially, each character typed to E from a non-display is assumed
to be a command; that is, the character is read by E as if it had
been typed with the CONTROL key depressed. One can, however, enter
LINE INSERT mode by typing the character I and then everything
thereafter is accepted as text to be inserted until ALTMODE (ESC on
some terminals) is typed. Of course, when the non-display user
types the command character X, E waits for an extended command
name to be typed followed by a carriage return.
The LINE EDITOR is not available on non-displays, so it is not
possible to arbitrarily edit an existing line on a non-display.
However, it is possible to use the substitution commands (using the
linefeed delimiter at the end of the search string) to change part
of one or more lines. Also, the ⊗XBREAK and ⊗XJOIN commands can be
used to separate out part of a line that you want to change.
The following two extended commands allow the user on a non-display
to execute commands that require precisely just the CONTROL bit or
precisely both the CONTROL and META bits. These are prefix commands
which affect the following command.
⊗XMETACONTROL This causes the next character to be interpreted
as if it had both the META and CONTROL bits.
This is useful on a non-display when you want to
use a command that requires both META and CONTROL.
⊗XCONTROL This causes the next character to be interpreted
as if it had the CONTROL bit but NOT the META bit.
If neither of the above two commands is used on a non-display, a
command that makes a distinction between CONTROL and META-CONTROL
will execute the CONTROL version; and a command that distinguishes
between any bits and none at all will execute the no-bit version.
The control key on a non-display is not at all the same as the
Stanford-keyboard CONTROL key referenced in most of this manual.
Some characters cannot be typed from a non-display to a user program
(like E) because their use has been preempted by the system. Thus
it is impossible to input those characters as text in E. However,
where such characters are used as commands by E, there is an
alternative extended command that does exactly the same thing as the
single-character command which the system intercepts. The table
below lists these extended commands and the single-character
commands they represent. For details on what these extended
commands do, see the writeups in this manual for the corresponding
single-character commands.
Extended Equivalent Single-Character Command
Command
⊗XEXIST ⊗∃ (there-exists sign, octal 025, ↑U (intercepted by system))
Types out file-switch list.
⊗XPARTIAL ⊗∂ (partial-sign, octal 017, ↑O (intercepted by system))
Carries out next command on current message.
⊗XMSG ⊗∂ (partial-sign, octal 017, ↑O (intercepted by system))
Carries out next command on current message.
⊗XLAMBDA ⊗λ (lambda, octal 010, ↑H) Switches files.
⊗XLOOKUP ⊗λ (lambda, octal 010, ↑H) Switches files.
⊗XEPSILON ⊗ε (epsilon, octal 006, ↑F) Switches files.
⊗XENTER ⊗ε (epsilon, octal 006, ↑F) Switches files.
Stanford characters that cannot be sent as text or as E control
characters are:
Octal Usual Prints Typed Preempted as a system
name out as in as command used for
002 alpha α <ctr>B type-out pause (toggles)
003 beta β <ctr>C monitor call
017 delta ∂ <ctr>O flush type-out (toggles)
025 there exists ∃ <ctr>U clear input line
032 tilde ~ <ctr>Z end of file
033 not equal ≠ <ctr>[ altmode
Character equivalences, Stanford AI Lab character set:
Code Name Prints Typed Preempted
octal out as in as for
000 null
001 down arrow ↓ <ctr>A
002 alpha α <ctr>B type-out pause (toggles)
003 beta β <ctr>C monitor call
004 logical and ∧ <ctr>D
005 logical not ¬ <ctr>E
006 epsilon ε <ctr>F
007 pi π <ctr>G
010 lambda λ <ctr>H
011 TAB
012 LF
013 VT
014 FF
015 CR
016 infinity ∞ <ctr>N
017 delta ∂ <ctr>O flush type-out (toggles)
020 containment ⊂ <ctr>P
021 implication ⊃ <ctr>Q
022 intersection ∩ <ctr>R
023 union ∪ <ctr>S
024 for all ∀ <ctr>T
025 there exists ∃ <ctr>U clear input line
026 circle times ⊗ <ctr>V
027 double-arrow ↔ <ctr>W
030 underbar _ <ctr>X
031 right-arrow → <ctr>Y
032 tilde ~ <ctr>Z end of file
033 not equal ≠ <ctr>[ altmode
034 less or equal ≤ <ctr>\
035 greater or eq ≥ <ctr>]
036 equivalence ≡ <ctr>↑
037 logical or ∨ <ctr>←
040 SP
041 exclamation ! !
042 double quote " "
043 number sign # #
044 dollar sign $ $
045 percent % %
046 ampersand & &
047 close s. quote ' '
050 left paren ( (
051 right paren ) )
052 asterisk * *
053 plus + +
054 comma , ,
055 minus - -
056 point . .
057 slash / /
060 digits 0 0
...
071 9 9
072 colon : :
073 semicolon ; ;
074 left broket < <
075 equal = =
076 right broket > >
077 question mark ? ?
100 at sign @ @
101 upper-case A A
...
132 Z Z
133 left bracket [ [
134 back slash \ \
135 right bracket ] ]
136 up¬arrow ↑ ↑
137 left-arrow ← ←
140 open s. quote ` `
141 lower case a a
...
172 z z
173 left brace { {
174 vertical bar | |
175 ALT ALT or ESC
176 right brace } }
177 BS or DEL BS or DEL
PARENTHESIS finding/matching commands: ⊗( ⊗) ⊗XLPAREN ⊗XRPAREN ⊗↔ ⊗XPAREN ⊗XPINFO
Modes Command Meaning
N,E ⊗( Find (
N,E ⊗) Find matching )
N,E ⊗↔ Return to place ⊗(, ⊗) or ⊗↔ was given
N,E LPAREN Search for next "(", crossing page boundaries
N,A,E PAREN Set the chars searched for by parenthesis cmds
N,A,E PINFO Type out info about last parenthesis command
N,E RPAREN Search for next ")", crossing page boundaries
This set of commands allows one to check nested sets of bracketing
symbols for matching pairs and for related properties. The search may
be restricted to the current page by using the ( and ) forms or it may
be extended over the rest of the file by the extended commands ⊗XLPAREN
and ⊗XRPAREN. It always starts from the location of the cursor at the
time the command is given and proceeds in the forward direction. The
nesting level is re-assigned the value 0 at the cursor's current
position for each new command (see special conventions below).
The default symbols are the normal parentheses ( and ). An EXTEND
command ⊗XPAREN allows one to define any desired set. The command
itself must be delimited by a space and followed by the desired two
characters and a carriage return. If the desired pair is from the set
→←, ⊂⊃, `', ≤≥, {}, <>, [], then only the first of the set and a
carriage return should be typed. If another set had been chosen the
default set may be reset by typing the setting command with a carriage
return only.
Note, that a space is an acceptable symbol and for this reason extra
spaces are not permitted in the command string. A distinction is also
made between upper and lower case characters so that both may be used.
In the special case when the same character is assigned to both symbols,
the concept of nesting has no meaning and the commands are interpreted
differently, as noted in the special section below.
In what follows, the two symbols of the chosen set will be referred
to as the left-symbol and the right-symbol respectively.
The normal commands are then ⊗( and ⊗). Each of these may take an
argument which specifies the sought-for nesting level for the region
defined by the bracketing symbol. The default argument is 1 for both
commands. The corresponding extend commands are ⊗XLPAREN and ⊗XRPAREN.
These commands may be given both when not in the line editor and when in
the line editor. If given when in the line editor the line will not be
written out should the search be unsuccessful or should the search be
successful with the found symbol in the same line. A successful search
that results in leaving the line editor to go to another line will cause
the original line-editor contents to be written.
There is one additional command ⊗↔ which, in effect, un-does the last
⊗(, ⊗), ⊗XLPAREN, ⊗XRPAREN or ⊗↔ command and returns the cursor to its
former position.
Note that the most frequent use of these command will be in LISP
where one wants to find matching parentheses, and hence the use
of ( and ) for the commands and for the default symbols.
SAIL users may find it useful to define an otherwise unused set
of symbols to mean BEGIN and END (some people already use ⊂ and
⊃ for this purpose), and to use these symbols in their stead, at
least while debugging.
Special conventions
A special convention has been adopted to avoid ambiguity for those cases
in which these commands are given while the line-editor cursor is under
one of the searched-for bracketing symbols. This convention is that a
cursor under a left-symbol is presumed to be actually to its left, that
is, outside of the symbol (as it appears) and a cursor under a
right-symbol is presumed to be actually to its right, again outside of
the symbol (and again as it appears).
Arguments, when used with these commands refer to the desired nesting
level within the region defined by the nesting pairs. If no argument is
given, the default value is 1, in accordance with the usual convention
for most E commands. As a mnemonic aid, the sought-for symbol is
reported with the argument shown after left-symbols and before
right-eymbols although the argument must always be typed before the
command (to permit the command character, itself, to be used as the
activator).
By convention the starting level is always re-assigned the value 0.
Left-symbols increase the nesting level and right-symbols decrease the
level.
Typical commands
⊗4⊗( Move the cursor to that left-symbol which would cause the
nesting to reach a level of 4, considering the present cursor
position to be at level 0. Do not move the cursor if this level
is not found and report the deficiency. This request is
reported as (4 for the reasons noted above.
⊗( With no argument, this command finds the very first left-symbol.
If the cursor is already at a left-symbol this command is a
NO-OP. This is in consequence of the convention that a cursor
under a left-symbol actually refers to the situation just ahead
of the symbol.
⊗XLPAREN This is the same as ⊗( except that the search is permitted to
continue past the end of the current incore page(s).
⊗) If the cursor is already positioned under a left-symbol, move
the cursor to the matching right-symbol. If the cursor is not
under a left-symbol, then search for that right-symbol that
returns the nesting level to its initial value of 0. Should the
cursor be under a right-symbol, the initial level is taken to be
that at its right. Note that this command is a NO-OP only for
the case where the desired level cannot be found. This request
is reported as 1).
If the end of the text is reached before a transition from level 1 to
level 0 is found, the cursor is left in its original position and the
deficiency is reported along with the other data. Deficiencies, in this
case can be of two sorts, either a level of 1 is never reached or having
been reached and possibly exceeded as a result of left-symbols, a
right-symbol is never encountered while at this level. In the first
case, the deficiency figure is reported following a down arrow (meaning
always below).
⊗XRPAREN This is the same as ⊗) except that the search is permitted to
continue past the end of the current incore page(s).
⊗3⊗) Search through the text as just described but stop at the first
right-symbol that reduces the nesting-level from the specified
level, in this case 3. This request is reported as 3).
Interpretation when the same character is used for both symbols:
Both the ( and the ) command, in this case, ignore the symbol that is
above the cursor at the time the command is given and search for the Nth
next example of the specified symbol, where N is the argument that is
used with the command. The ( command is not a NO-OP in this special
case.
INFORMATION ABOUT PARENTHESIS SEARCHES
In the Terse or normal reporting states, E does not type out all the
possible information when a parenthesis search is done. To find out
all this information, use the following command, or be in Verbose
mode when the search is done.
⊗XPINFO Type out information about the last parenthesis
search done.
Swapping To and From E via RPG startups: ⊗XRSYS ⊗XRUN ⊗XGORPG ⊗XDRD ⊗XTV
Modes Command Meaning
N DIRED Swap to the DIRED directory editor
N DRD Swap to the DIRED directory editor
N GORPG Swap to SNAIL (RPG) to reexecute last cmd
N,A,E RSYS Run a given system program, with RPG startup
N,A,E RUN Run a given user program, with RPG startup
A user program can start up E and have it automatically edit a
particular file at a specific place, with the capability of returning to
the original program or to any other particular program. Furthermore, E
has commands that cause it to swap to certain system programs or to any
named system or user program.
In each of these cases, whether coming from E or going to E, the new
program is started up at the so-called "RPG startup address", namely, at
1 beyond the normal starting address. This is usually done with the
SWAP UUO by specifying a starting-address increment of 1.
The commands to start up another program from E are listed below.
Each of these first puts down any attach buffer and writes out to the
disk any changes on the page before swapping to another program.
⊗XRSYS <program> This runs the given system program (device SYS:)
with an RPG startup. See also next paragraph.
⊗XRUN <program> This runs the given user program (device DSK:)
with an RPG startup. See also next paragraph.
⊗XGORPG This runs the system program SNAIL (formerly RPG)
with an RPG startup.
⊗XDRD Either of these runs the system program DIRED
or with an RPG startup.
⊗XDIRED
If the <program> is omitted from the ⊗XRSYS or ⊗XRUN command, and if E was
originally run with an RPG startup, then the program run by the command
will be the program whose name was in ACs 0-3 when E was started up (see
below for the AC contents expected by E on an RPG startup). Thus a
program that wishes to swap to E and to have E swap back to it can set up
the ACs as described below and swap to E using the RPG startup (starting
address plus 1).
When E is run via an RPG startup, it expects certain data to be in the ACs
(placed there before the SWAP was done). When E starts up another program
via the ⊗XRSYS or ⊗XRUN command, it leaves this same data in the ACs.
This data is listed in the table below. (RH means "right half" of the
AC, and LH means "left half".)
AC Data in AC upon RPG startup (starting address + 1)
0 Name of program file
1 LH Extension of program file
2
3 PPN of program file
4
5
6 Device of program file
7
10
11 PPN of edit file
12 Device of edit file or zero for DSK:
13 LH Extension of edit file
RH Mode bits (see below)
14 Name of edit file
15 LH Attached-line count+400000, or column position within line, or zero
RH Line number in edit file
16 Page number in edit file
17
Coming from E (⊗XRSYS or ⊗XRUN), ACs 0-6 will contain the name of the
program that E is swapping to, and ACs 11-16 will contain the name of the
edit file that was being edited by E.
In swapping to E, ACs 0-6 contain the name of the program that E should
swap back to upon an ⊗XRSYS or ⊗XRUN command given without a program name,
and ACs 11-16 contain the name of the file E should edit. If AC 14 (name
of edit file) contains zero, E will read the name and starting page and
line of the edit file from the normal editor TMPCOR file (ED), and the
TMPCOR file will be updated upon exit. Otherwise, the TMPCOR file is
neither read nor written for an RPG startup.
The mode bits in the right half of AC 13 are:
Bit Octal Meaning
18 400000 Create this file.
19 200000 Edit in readonly mode (/R).
20 100000 Edit in no-directory mode (/N).
Message and paragraph handling commands: ⊗∂<cmd> ⊗0⊗∂ ⊗!<cmd> ⊗0⊗!
Modes Command Meaning
N,A,E ⊗∂ Operate on message with next cmd
N,A,E ⊗! Operate on paragraph with next cmd
MESSAGE HANDLING COMMANDS: α∂ and αβ∂
The partial-sign (∂) command is designed for easy handling of
messages in mail files, but it can be used on any file regardless of
whether the file contains mail-like messages. For instance, this
command is capable of attaching (or deleting) a whole page of text at
once and simultaneously deleting the (not in core) pagemark for that page.
The α∂ and αβ∂ commands are search commands used to find the beginnings of
"messages." A message is defined as the largest contiguous set of lines
of which only the first starts with a partial-sign (∂) and the last of
which is followed either by another line starting with partial-sign or by
the end of the page. The current message is defined as the message
containing the current line (the arrow line). If the arrow is on the row
of stars that marks the end of the page, then the current message is the
one that contains the last real line of the page.
The only difference between α∂ and αβ∂ is that the αβ∂ version considers
the current line to be the beginning of a message, even if the line
doesn't start with a "∂". Thus the α∂ version works on the whole real
current message, whereas the αβ∂ version works on only that part of the
message from the current line forward.
Messages are never considered to extend across page boundaries. If
neither the current line nor any of the lines preceding it on the
current page starts with a partial-sign, then the current "message"
starts with the first line of the current page. If none of the lines
(on the current page) below the current line starts with a
partial-sign, then the last line of the current "message" is the last
line on the page. Thus, if there are no lines on the current page
that start with ∂, then the current "message" is the whole page.
Like the ⊗F commands, the ⊗∂ commands require a following command before
any action is taken (with one exception, which is noted below). However,
the ⊗∂ commands do not accept a search string before the second command;
⊗∂ always searches for lines beginning with a partial-sign. If the
command following is one of the special commands that use the number of
lines searched (for instance, by the ⊗F command) as the argument to the
command, then that command will be carried out for the entire current
message. If the command is not one of these special ones, then it will be
executed at the beginning of the next message. The special commands that
use the number of lines searched as the command argument are indicated in
the index on p. 3 by the letter "S" in the modes column.
The ⊗∂ commands may be preceded by a numeric argument which specifies
the number of messages (starting with the current one) which the
command is to affect. If that number is negative, then the messages
just before the current one are the ones effected, with the absolute
value of the argument specifying how many messages. Note that ⊗-αβ∂
considers the current line to start a message, and so it will work on
the message text immediately before the current line.
N.B.: A zero argument to the ⊗∂ commands means move to the beginning
of the current message WITHOUT WAITING FOR A SECOND COMMAND. This is
the only case where a second command is not used by the ⊗∂ command.
!!!!! SPECIAL FEATURE OF THE PARTIAL-SIGN COMMAND !!!!! N.B.: If the
partial-sign command is used with ⊗A (attach) or αβD (delete) to attach
or delete all of the incore text, then the pagemark for that text will
also be deleted. In particular, if the current page is not the last
page in the file, then the following pagemark will be deleted, leaving
you at the top of that page; if the current page is the last page in the
file, then the preceding pagemark will be deleted and you will be left
at the bottom of the previous page. No pagemark deleting will be done
if the file has only one page besides the directory, but in this case,
if the file is a message file (extension .MSG) on [2,2], then a flag is
set which will cause the file to be deleted (since there is no text in
it) when you leave it unless you do something to change the file (add
text or pages) before then. And note that the page deleting only
happens when the entire incore text is either deleted or attached using
the partial-sign command! Note that since the partial-sign command will
not cross an incore pagemark, this feature cannot apply when you have
two or more pages in core.
If there are already some lines in the attach buffer at the time you
give an ⊗∂⊗A command, the new messages being attached are added at
the end of the attach buffer. If you give a ⊗-⊗∂⊗A command when
there are already lines in the attach buffer, the new messages being
attached are inserted at the beginning of the attach buffer, ahead of
the text already there.
Here are some example uses of the partial-sign command. The ones marked
with an asterisk (*) all involve either αβD or ⊗A and will delete a
pagemark in addition to the action noted if the action results in
deleting or attaching all the incore text, unless the current page is
the only page (besides any directory) in the file.
α∂αβD ;* Deletes the current message.
α∂⊗A ;* Attaches the current message.
α∂⊗C ;Copies the current message into the attach buffer.
⊗0⊗∂ ;Moves to beginning of current message.
⊗∂<cr> ;Moves to beginning of next message.
⊗-α∂<cr> ;Moves to beginning of previous message.
⊗∂<bs> ;Moves to end of current message.
⊗∂⊗J ;Moves to beginning of next message and jumps screen up.
⊗∂αβ<cr> ;Enters LINE INSERT mode between the end of the
;current message and the beginning of the next one.
⊗3α∂αβD ;* Deletes three messages starting with the current one.
⊗3α∂⊗A ;* Attaches three messages starting with the current one.
⊗3α∂⊗C ;Copies three messages starting with the current one.
⊗-⊗2α∂αβD ;Deletes the two messages preceding the current one.
⊗-⊗2α∂⊗A ;Attaches the two messages preceding the current one.
⊗-⊗2α∂⊗C ;Copies the two messages preceding the current one.
αβ∂⊗XTYPE<cr> ;Types out text from current line to end of message
αβ∂⊗XJUST<cr> ;Justifies text from current line to end of message
αβ∂⊗D ;Deletes text from current line to end of message
⊗-αβ∂⊗XTYPE<cr> ;Types out text from beginning of message thru line
; just before current arrow.
PARAGRAPH HANDLING COMMAND: α! and αβ!
The exclamation-point (!) command operates on PARAGRAPHS in the same way
that the partial-sign (∂) command operates on messages. Thus α! works on
the whole current message, and αβ! interprets the current line to be the
beginning of a paragraph and therefore effectively works on only the part
of the current paragraph from the current line on.
However, UNLIKE the ⊗∂ command, the ⊗! command never deletes a pagemark.
NOTE: "PARAGRAPH" here means a contiguous group of non-empty lines
plus certain surrounding empty lines (if any). Included in the
paragraph of the ! command are: one empty line (if any) at the
beginning of the paragraph and all but one of any empty lines at the
end of the paragraph. However, if the last line of a page is blank,
it is considered part of the paragraph containing the previous line.
The two commands ! and ∂ don't actually do anything until you type another
command. If that following command accepts a search distance argument,
then the effective argument will be the number of lines in the current
paragraph (! command) or message (∂ command); for example, α!⊗XJUST<cr>
will justify the current "paragraph" and αβ!⊗XJUST<cr> will justify lines
from the current line to the first blank line following. If the command
that follows ⊗! or ⊗∂ does NOT accept a search distance argument, then
that command is carried out after moving to the beginning of the next
paragraph (!) or message (∂). The one case in which the ! and ∂ commands
don't take a following command is when a preceding zero argument has been
supplied (that is, ⊗0⊗! or ⊗0⊗∂), in which case the command immediately
moves to the beginning of the current paragraph (!) or message (∂).
Macros: ⊗XDEFINE ⊗Z ⊗Y ⊗≡ ⊗∩ ⊗∪ ⊗⊂ ⊗⊃ ⊗$ ⊗% ⊗~ ⊗_ ⊗XCASE ⊗XRESUME ⊗XABORT ⊗# ⊗XSTOPALL ⊗XSTOPONE ⊗XSTOPZERO ⊗XSTOPHOW ⊗XSILENT ⊗XRAPID
(See following three pages for more about macros.)
Modes Command Meaning
<ESC>I Terminate macro expansion
N,A,E ⊗Y Call current macro
N,A,E ⊗Z Call a named macro
N,A,E ⊗# (Actually the "#" char) Pass macro call arg to next cmd
N,A,E ⊗≡ Call the macro named "≡"
N,A,E ⊗∩ Call the macro named "∩"
N,A,E ⊗∪ Call the macro named "∪"
N,A,E ⊗⊂ Call the macro named "⊂"
N,A,E ⊗⊃ Call the macro named "⊃"
N,A,E ⊗$ Call the macro named "$"
N,A,E ⊗% Call the macro named "%"
N,A,E ⊗~ Call the macro named "~"
N,A,E ⊗_ Call the macro named "_"
N,A,E ABORT Abort one or more macros levels in progress
N,A,E CASE Select and call a macro from a list of macro names
N,A DEFINE Define a macro
N,A,E RAPID Enable line editor simulator for use in macros
N,A,E RESUME Resume expansion of a macro that was stopped early
N,A,E SILENT Suppress error messages while inside macros
N,A,E STOPALL Set action on macro error to stop all macros
N,A,E STOPHOW Find out setting of macro error action
N,A,E STOPONE Set action on macro error to stop just one macro
N,A,E STOPZERO Set action on macro error to ignore errors
DEFINING AND CALLING MACROS--MACRO NAMES
Macros are provided in E to save the user the effort of typing the same
things over and over again. A macro represents any number of characters
that should be "typed" to E as commands and text whenever that macro is
called. A macro is defined with the command
⊗XDEFINE <macro name><cr>
where <macro name> can contain letters and digits (it can even start with
a digit or contain only digits), or it can be entirely blank, or it can
consist of exactly one of the nine characters below (which characters
appear on the top of the digit keys on DD and III keyboards at SU-AI):
≡ ∩ ∪ ⊂ ⊃ $ % ~ _
Only the first six characters of a <macro name> are significant, but
beyond that a <macro name> can NEVER be abbreviated. After giving the
⊗XDEFINE command, the user types the characters (commands and/or text)
which the macro is to represent. The definition is ended by typing αβ<lf>
on displays or ↑Z on non-displays. When you end the definition, the
macro's name and definition will be typed out unless the definition was
made during macro expansion (i.e., by another macro).
A macro can be called by either
⊗Z<macro name><cr>
or
⊗Y
where the latter calls the last macro either defined or called, except
that a macro whose name is one of the nine special characters (≡∩∪⊂⊃$%~_)
can NEVER be called with the ⊗Y command. These nine macros, however, can
ALWAYS be called with the corresponding one of the nine single-character
commands
⊗≡ ⊗∩ ⊗∪ ⊗⊂ ⊗⊃ ⊗$ ⊗% ⊗~ ⊗_
Each of the macro-calling commands causes the macro definition to be
expanded by treating the commands and text of the definition as if they
were being typed in by the user. The ⊗Y command allows the user to
repeatedly call the same macro with a single keystroke each time, but
only until the user either calls (with ⊗Z) or defines another macro.
Named macros and the ⊗Z command allow the user to define and use as many
macros as he wants.
While macro expansion is in progress, there are no prompts given (like
"Command?"), "OK" is never typed out, and the display is not updated.
However, the ⊗V command given inside a macro causes the display to be
updated immediately. Thus you can put ⊗V commands into a macro definition
to let you watch the progress of the macro. Also, you can have a macro
pause for # seconds by putting ⊗#⊗V into the macro at the desired
place(s).
SELECTIVE MACRO CALLING
The following command can be used to select and call one macro from a
list. In this case the repeat argument to the command determines which of
several possible macros is to be called. This command is normally used
inside a macro that might want to call some other macro(s).
⊗#⊗XCASE <macro name> <macro name> ... <macro name><cr>
This command executes the #th macro in the list of macro names, where the
counting of # starts at zero (0); the selected macro is executed with a
repeat arg of 1. For instance, ⊗2⊗XCASE A B C D<cr> will execute macro C.
The macro names should be separated with spaces. No macro name in the
middle can be omitted, and the null (blank) macro name cannot be used
here; however, any non-blank names can be supplied, since E does not check
that all such names represent currently defined macros. If the repeat arg
given to ⊗XCASE is negative, then the command will be aborted. Since the
extended command line is buffered in E, and since the buffer has a fixed
size, there is an effective limit to the number of macro names that can be
listed in the command line; the current maximum command line length is
about 119 characters -- characters beyond that are ignored. An error will
occur if there are not enough macro names in the command for the given
repeat arg.
MACRO EXPANSION ENDING -- ALTMODE INSERTED
When all macro expansion is terminated for any reason, an ALTMODE
character is used as the next input character to force completion of any
partially-typed command. However, there is one major exception to this
rule.
If the macro expansion runs to completion and the effect of the last
characters in the macro is to leave a line of text (from the file) in
the line editor, then the normally-inserted ALTMODE is omitted and the
text is left in the line editor.
ITERATIVE AND RECURSIVE MACRO EXPANSION
Iteration: A positive repeat argument on a macro call will cause the
macro to be expanded a number of times. For example,
⊗3⊗Z<macro name><cr>
or
⊗3⊗Y
will cause the macro to be expanded three times. Negative arguments to
macro calls are reserved for future use, although they currently result
in making a macro call a no-op. A zero argument will cause the macro
name and definition to be typed out, as explained below.
Recursion: A macro can call other macros or even itself. When a called
macro finishes, control returns to the calling macro, which then continues
its own expansion. A pushdown stack is used to keep track of the macro
calls (expansions) currently in progress. This macro stack currently has a
length of about 48, thus allowing nested macro calls up to that depth. Any
attempt to call a macro beyond that depth will immediately terminate all
macros in progress; however, ⊗XRESUME (see below) can be used to continue
macro expansion by skipping the macro call that caused the overflow.
FINDING OUT MACRO NAMES AND DEFINITIONS--STANDARD REPRESENTATION OF DEFINITIONS
Arguments of zero are used to have macros and their definitions typed
out. The command
⊗0⊗XDEFINE<cr>
will type out the names of all defined macros. A zero argument to a
macro call will simply cause the macro's name and definition to be typed
out; that is, use
⊗0⊗Z<macro name><cr>
or
⊗0⊗Y
or
⊗0⊗≡ ⊗0⊗∩ ⊗0⊗∪ ⊗0⊗⊂ ⊗0⊗⊃ ⊗0⊗$ ⊗0⊗% ⊗0⊗~ ⊗0⊗_
with the second form also being useful for finding out which macro the
next ⊗Y command would call.
Macro definitions are always typed out using a text representation which
allows for the CONTROL and META bits and non-printing characters (such
as formfeed). This same representation is used when reading or writing
macro definitions from or to the incore page and command files--see p. 27
for those commands.
Actually, there are two representations available, the standard
representation and the alternate representation. The standard version
is always used for typing out definitions, but either or both can be
used when reading definitions from the incore page or from a command
file. These representations involve three special escape characters and
several ignored characters. The characters ignored are
TAB,ALT,CR,LF,BS,VT, and FF.
The three escape characters are
"⊗", "α" and "β".
To represent any of the seven ignored characters or any of the three
escape characters, two characters are used, namely, the character "⊗"
(circle-x) followed by a character specifying which special character
you want. These representations are listed in the table below.
The character alpha (α) causes the next command to have the CONTROL bit
added. The character beta (β) causes the next command to have the META
bit added. Thus "αβV" represents CONTROL-META-V.
Representations Corresponding commands to E
Standard Alternate
⊗⊗ ⊗⊗ ⊗ circle-x
⊗; ⊗; Ignore text from here to end of line (to CR, LF or FF).
⊗⊂ ⊗⊂ Ignore text from here to first right-horseshoe (⊃).
⊗= ⊗T TAB horizontal tab
⊗≠ ⊗A ALT altmode
⊗↔ ⊗C CR carriage return
⊗↓ ⊗L LF linefeed
⊗↑ ⊗B BS backspace
⊗← ⊗V VT vertical tab
⊗→ ⊗F FF formfeed
⊗α ⊗X α alpha
⊗β ⊗Y β beta
α ⊗1 Add CONTROL bit to next command
β ⊗2 Add META bit to next command
For example, CONTROL-META-LINEFEED is represented by "αβ⊗↓" or "αβ⊗L" or
"αβ⊗l". The case of a letter following "⊗" is irrelevant, but
otherwise, if a "⊗" is followed by a character other than those listed
above, an error will result and the command will not be completed.
The escape sequences ⊗; and ⊗⊂ are useful for putting comments into E
command files (e.g., EINIT.CMD) without having the comments taken as part
of the commands to be executed. The form ⊗; allows you to put a comment
at the end of a line, and the form ⊗⊂ allows you to have partial-line or
multi-line comments. The ⊗XCOMMENT command can also be used for comments,
but it is actually stored (e.g., in macro definitions) and executed, so it
can only occur where a normal command can occur; furthermore its use
should be avoided inside a macro definition, since it needlessly increases
the size of the macro and slows it down a little. Note that since TABs
are ignored, you can use them to set off comments or actual commands from
other text in a command file.
Note: These representations are NOT usable in the ⊗XDEFINE command when
defining a macro from the terminal. Definitions typed in from the
terminal are entered verbatim--no character conversion.
UNDEFINING MACROS
A macro can be undefined by giving the ⊗XDEFINE command with a negative
argument. Thus the command
⊗-⊗XDEFINE <macro name><cr>
makes E completely forget about the named macro.
ERRORS DURING MACRO EXPANSION
The user can select the action to be taken when an error ("SORRY --
...") occurs inside a macro. The default action is to stop all macro
expansion, but the user can give any of three extended commands to
select the current error action from three possibilities.
⊗XSTOPALL On error, stop all macro expansion. This is the default.
⊗XSTOPONE On error, stop the current macro and return control to any
higher level calling macro as if the current macro had
finished.
⊗XSTOPZERO On error, ignore the error and let macro expansion continue.
There is one additional extended command to find out what the currently
selected error action is.
⊗XSTOPHOW Report which of the above three actions is currently selected.
Also, any argument given with any of the three previous commands will
suppress selecting an action, but will report the current error action.
When E needs an answer to a Yes or No question while processing some
command, it will get the answer FROM THE USER'S TERMINAL, NEVER FROM A
MACRO DEFINITION. Unless the answer is Yes, macro expansion is treated
as if a command error had occurred, and the current error action is
taken.
Certain errors that E detects always cause stopping of all macros in
progress, regardless of the current STOPxxx setting. These errors are
never expected to occur deliberately inside macros, and so they stop all
macro execution as an aid to macro debugging and as a safety feature. The
current such permanent-STOPALL errors for macro execution are:
Unrecognized command character
Ambiguous (extended) command
Unknown (extended) command
Syntax error in extended command line
Can't exit while expanding a macro
Command illegal from line editor here
Macro pushdown list overflow
(Syntax error in LISPSYNTAX command)
Cannot execute a readonly variable
Invalid macro name
Attempt to write out text that cannot be written out (from
directory page, unformatted file, or /B mode)
Macro text for line editor is too long
No such readonly variable
Note that for the error involving text too long for the line editor, E's
line editor buffer is considerably bigger than the real line editor's
buffer, so it is still possible to lose some text (without stopping any
macro) if a macro's line editor text is slightly too long for the line
editor.
The ⊗XSILENT command suppresses error messages that are generated inside
macros except when such an error would stop all macros. Thus SILENT mode
can be used to speed up execution (by suppressing the error typeout) in
macros that deliberately cause errors to happen in order to abort one
level of macro execution (in ⊗XSTOPONE mode). The command ⊗-⊗XSILENT
disables this mode. The commands ⊗0⊗XSILENT, ⊗0⊗XVERBOSE, and ⊗0⊗XTERSE
all type out the status of SILENT mode (when enabled) in addition to the
status of the TERSE/NORMAL/VERBOSE mode.
ABORTING AND RESUMING MACRO EXPANSION
Four ESCAPE commands are available for interrupting macro expansion.
These are ESC I, ESC 1 I, BRK I, and BRK 1 I. Two of these, ESC 1 I and
BRK 1 I, affect only macro expansion. ESC I and BRK I interrupt macro
expansion as well as other E processes, such as multipage searches.
Thus ESC 1 I or BRK 1 I can used when you want to stop a macro but don't
want to interrupt a search in progress.
Typing BRK I or BRK 1 I will terminate the current macro and return
control to any higher level calling macro.
Typing ESC I or ESC 1 I will terminate all macro expansion. When this
mechanism is used to stop macro expansion, the user can have the
expansion resumed where it left off by giving the command ⊗XRESUME.
The ⊗XABORT command can be used to explicitly abort any number of levels
of macro expansion by popping a number of calls off the macro stack.
This command can be included in a macro definition to automatically end
one or more macro calls, or it can be given from the terminal to cause
the next ⊗XRESUME command to resume macro expansion one or more levels
up from the current macro stack location. When given WITHOUT an
argument, ⊗XABORT stops all macro expansion--this form is meaningless
except inside a macro. The ⊗#⊗XABORT command WITH an argument pops the
specified number (#) of macro calls off the macro stack (whether the
macro stack is actively being used or just being maintained for a later
⊗XRESUME).
Whenever all macros have been aborted before completion, the command
⊗XRESUME<cr>
will resume macro expansion where it left off. Also, the command
⊗#⊗XRESUME<cr>
can be given with a decimal argument (#) to find out what macros are in
progress and what text and repeat arguments remain to be processed. An
argument of ⊗# finds the element which is # calls from the top of the
macro stack and types out the remaining repeat count, the macro call
level, the name, and the remaining text of that macro call. Thus ⊗0 types
the top of the stack, ⊗1 types the next element on the stack, etc.
PASSING REPEAT ARGUMENTS TO COMMANDS INSIDE MACROS: THE ⊗# COMMAND
The number-sign command, ⊗#, allows one or more commands inside a macro
to access and use the repeat argument given to a macro call. (In this
paragraph and the table below, "#" represents the number-sign character
itself, NOT an arbitrary number.) Inside a macro, each occurrence of
the ⊗# command passes the macro call's argument to the next command and
inhibits the repeated expansion of the macro (clearing the effective
repeat count of the macro call). The actual argument passed to the
command following the ⊗# depends on the arguments given to (1) the macro
call and (2) the ⊗# command itself. In the simplest case, if one of
these two arguments is omitted, the other is used. If the argument to
⊗# is relative (preceded with ⊗+ or ⊗-), then the two (signed) arguments
are added together. The following table shows the resulting argument as
a function of the two "input" arguments, with examples given in
parentheses. Note that the macro call argument (if any) is always
positive; however, the ⊗# command can be followed by ⊗- to invert the
sign of the resulting argument. Outside of macro expansion, the ⊗#
command is treated as if you had NOT typed it!
Arg to Arg to Resulting arg passed
macro call ⊗# command to command following ⊗#
------------ ------------- -------------------------
none anything Arg to ⊗# command
(none) (⊗-⊗2) (⊗-⊗2)
relative none Arg to macro call
or absolute or absolute
(⊗+⊗5) (none) (⊗+⊗5)
(⊗5) (⊗2) (⊗5)
relative relative Relative sum of the two arguments
(⊗+⊗5) (⊗-⊗2) (⊗+⊗3)
absolute relative Absolute sum of the two arguments,
except negative sum is relative
(⊗5) (⊗+⊗2) (⊗7)
(⊗5) (⊗-⊗7) (⊗-⊗2)
REQUESTING/SUPPRESSING INFORMATIONAL MESSAGES: ⊗XVERBOSE AND ⊗XTERSE
Certain informational messages will be either typed out or suppressed
depending on the reporting state that E is in: Terse, Normal, or
Verbose. The reporting state can be set with the ⊗XVERBOSE and ⊗XTERSE
commands, which are described elsewhere. The Verbose state is useful
during debugging of macros that call other macros.
The following messages are typed out only in Verbose mode.
Calling ... ;A macro is being called.
Ending ... ;A macro call has just finished.
The following messages are suppressed only in Terse mode.
Aborting macro ... ;An error has caused aborting of one
; macro call while in ⊗XSTOPONE mode.
Abort of # macros requested from ...
;A ⊗#⊗XABORT command has been given.
FORMAT OF NAME TYPEOUT FOR MACRO CALL
When a macro call is mentioned in an error or informational message, the
form typed out is usually
[nX](m)macname
where n is the remaining repeat count for this macro call, m is the
level of this macro call, and macname is the name of the macro. The
form [nX] will be omitted if n is 1. A level (m) of 1 represents the
bottom of the macro stack, that is, the level called from the terminal.
Note that macname might be blank, since the blank macro name is
perfectly legal.
LINE EDITING IN MACROS
Line editor commands may be used inside macros, and they will have their
normal effects except that the αD command, when intended to delete the
CRLF at the end of a line (thus joining two lines), MUST be preceded in
the macro definition either with α<tab> or with αK<cr> so that E will be
sure that the αD will be given at the end of the line. The effect of a
bad use of αD is that characters after the αD in the macro definition
up through the first activation character following are not "typed"
until the macro expansion ends, which can be particularly noticeable if
you use a repeat argument on the macro call.
The above rule about αD also applies to αI, which also should be preceded
by α<tab> when intended to be given at the end of the line editor in a
macro.
LINE EDITOR SIMULATOR FOR MACROS: ⊗XRAPID
In order to reduce execution time for macros that use the line editor, E
uses a line editor simulator whenever possible during macro expansion.
This means that E itself handles certain line editor functions (see
limitations below) to avoid the time-consuming process of shipping text
and commands to and from the line editor. This should not effect the
results of any macro, but it can speed up certain types of macros by a
factor of 10.
Macros that do not use the line editor are not affected by the existence
of the simulator.
The line editor simulator is fairly primitive in that it can only do a
limited number of line editor operations, but when the simulator cannot
handle a line editor command, the real line editor is used instead. Thus
macros will work the same with or without the simulator, but execution
time will be reduced if the simulator can handle all the line editor
operations in a given sequence. Since the simulator avoids doing any UUOs
that invoke the real line editor, line editor simulation is up to 10 times
as fast as real line editor use.
The line editor simulator in E handles almost all commands that do not
change the number of characters in the line. This includes all cursor
movement commands plus most attempts to overtype characters in the line.
E does NOT handle the following cases: (1) typing over a tab or typing a
tab (because of the variable width of tabs) and (2) insertions and
deletions. Any time a macro attempts a line editor function that the
simulator cannot handle, E gives the text and commands to the line editor
to let it carry out the editing on that line (thus ensuring that the
commands get the right result).
Between the time that any new feature gets added to the real line editor
and the time the same feature gets programmed into E's simulator, it is
possible that the simulator will give incorrect results. Therefore the
simulator can be disabled and re-enabled with the commands shown below.
(Of course, it is fairly rare that new features are added to the line
editor.)
⊗-⊗XRAPID Disable the line editor simulator which is
normally used during macro expansion.
⊗XRAPID Enable the line editor simulator. This is
the default.
⊗0⊗XRAPID Report whether the line editor simulator
is enabled or disabled.
As the command name suggests, macros involving line editor commands will
usually execute more RAPIDly when the simulator is enabled.
EXITING NOT ALLOWED DURING MACRO EXPANSION
The command to exit from E (namely, ⊗E) is not legal coming from a macro
expansion. This is disallowed to prevent accidental exiting while using
attach mode inside macros, since the command to put down the attach
buffer is the same as that to exit, ⊗E.
*** MORE COMMANDS RELEVANT TO MACROS ARE EXPLAINED ON THE NEXT 3 PAGES. ***
Numeric Macros and Readonly Variables: ⊗XSET ⊗XARGUMENT ⊗XMULTIPLY ⊗XDIVIDE ⊗XREMAINDER ⊗XADD ⊗XSUBTRACT ⊗XMINIMUM ⊗XMAXIMUM ⊗XIFLT ⊗XIFLE ⊗XIFGE ⊗XIFGT ⊗XIFEQ ⊗XIFNE ⊗XCHARACTER
(See previous page and following two pages for more on macros.)
Modes Command Meaning
N,A,E ADD Add given repeat arg to macro's value
N,A,E ARGUMENT Set up repeat argument from value of numeric macro
N,A,E CHARACTER Generate the next command character from numeric value
N,A,E DIVIDE Divide macro's numeric value by given repeat arg
N,A,E IFEQ Error unless repeat arg = macro value
N,A,E IFGE Error unless repeat arg ≥ macro value
N,A,E IFGT Error unless repeat arg > macro value
N,A,E IFLE Error unless repeat arg ≤ macro value
N,A,E IFLT Error unless repeat arg < macro value
N,A,E IFNE Error unless repeat arg ≠ macro value
N,A,E MAXIMUM Set macro's value to MAX(<old value>,<repeat arg>)
N,A,E MINIMUM Set macro's value to MIN(<old value>,<repeat arg>)
N,A,E MULTIPLY Multiply macro's numeric value by given repeat arg
N,A,E REMAINDER Set macro to remainder of <old value> / <repeat arg>
N,A,E,S SET Set the value of a numeric macro
N,A,E SUBTRACT Subtract given repeat arg from macro's value
INTEGER-VALUED NUMERIC MACROS
There are numeric macros, whose integer values are represented by strings
of digits (optionally preceded by + or - and optionally followed by
non-digits). There are several commands to create, operate on, test,
and apply numeric macros. Numeric macros can be "executed" just like any
other macros; the result is the typing of the simple string of digits into
the text. The CONTROL and META bits are ignored when evaluating a numeric
macro and are left OFF when E generates a numeric macro.
When a macro is being evaluated for its numeric value, an error will
result if the macro definition doesn't start with a string of digits
(optionally preceded by + or -); the evaluation is terminated by any
non-digit (not including a leading + or -). The maximum absolute value
that can be generated without error during evaluation of a numeric macro
is 2↑35 - 1. Larger numeric values will give undefined results. The
largest possible absolute value of the repeat argument for any command is
2↑17 - 8; larger repeat arguments will be limited to this maximum absolute
value (with proper sign preserved).
The only difference between numeric and non-numeric macros is that
evaluating (as opposed to executing) a non-numeric macro will result in an
error.
⊗XARGUMENT <macro> Sets up a repeat argument for the following
command from the named numeric macro. Any arg
given to the ⊗XARGUMENT command itself is added to
the value from the macro before setting the
resultant argument. If the macro's definition
starts with "+", the resultant argument will be
relative, as if ⊗+ were typed. The largest
possible absolute value of the repeat argument is
2↑17 - 8; larger repeat arguments will be limited
to this maximum absolute value (with proper sign
preserved).
⊗XSET <macro> Sets the named macro to the string of decimal
digits (possibly preceded by + or -) that
represents the command's numeric repeat argument.
This command accepts a search distance as the
repeat argument.
⊗XSET <macro1> ← <macro2>
Copies the definition of <macro2> into <macro1>.
The FIRST macro name CANNOT be blank when this
form of ⊗XSET is used, but the SECOND name CAN be
blank (meaning the blank-named macro). The second
name can be that of a readonly variable (ending
with "."), in which case the first macro gets
defined as the string of digits that represents
the readonly variable's current decimal value.
This command is needed to copy large-valued
numeric macros, since
⊗XARGUMENT <macro2><cr>⊗XSET <macro1><cr>
will truncate <macro2>'s absolute numeric value
to 2↑17 - 8, which is the maximum legal repeat
argument. The ⊗XSET command will be aborted if E
can't figure out what you want. Equals-sign (=)
can be used in place of the left-arrow (←).
Of course, all the commands that work on macros work just as well on
numeric macros, but the following commands deserve particular mention here
since they are important in conjunction with the commands for numeric
macros.
⊗0⊗Z <macro> Types macro's definition.
⊗Z <macro> Executes the macro.
⊗-⊗XDEFINE <macro> Undefines the macro.
The following commands operate on the numeric value of a given macro. If
the macro's old value started with "+", then the new value will start with
"+" unless the new value is negative. CONTROL and META bits are ignored
in the macro's old value and are left OFF in the new value. As usual, if
no repeat argument is given, ⊗1 is assumed; thus ⊗XADD TOTAL<cr> adds 1 to
TOTAL. In the ⊗XDIVIDE and ⊗XREMAINDER commands, the remainder has the
same sign as the dividend and the quotient is not rounded.
⊗XMULTIPLY <macro> Multiply macro's numeric value by given repeat arg.
⊗XDIVIDE <macro> Divide macro's numeric value by given repeat arg.
⊗XREMAINDER <macro> Make macro's new value be the remainder from the old
value divided by the given repeat arg.
⊗XADD <macro> Add given repeat arg to the macro's value.
⊗XSUBTRACT <macro> Subtract given repeat arg from the macro's value.
⊗XMAXIMUM <macro> Set macro's value to MAX(<old value>,<repeat arg>).
⊗XMINIMUM <macro> Set macro's value to MIN(<old value>,<repeat arg>).
Each of the following "IF" commands compares the command's repeat argument
against the value of a given numeric macro. If the test proves true,
nothing happens, but if the test fails, then an error will result (which
can be used to terminate macro expansion). As usual, if the repeat
argument is omitted, ⊗1 is assumed.
⊗XIFLT <macro> Error unless repeat arg < macro value
⊗XIFLE <macro> Error unless repeat arg ≤ macro value
⊗XIFGE <macro> Error unless repeat arg ≥ macro value
⊗XIFGT <macro> Error unless repeat arg > macro value
⊗XIFEQ <macro> Error unless repeat arg = macro value
⊗XIFNE <macro> Error unless repeat arg ≠ macro value
READONLY INTERNAL E VARIABLES
There are certain always-defined readonly variables whose values can be
accessed with most of the numeric macro handling commands. These
variables include the current page number, the current line number, the
current column position, etc. The complete list of variables is given
below (more can be added if necessary).
Here are the commands that accept either a readonly variable name or a
macro name. See the individual command descriptions for what these
commands do with the value of the variable or macro. Commands in the
second and third columns below (like ⊗XMULTIPLY) normally set (in addition
to using) a numeric macro value; when given a readonly variable name those
command merely type out the resultant value.
⊗XARGUMENT ⊗XMULTIPLY ⊗XADD ⊗XIFLT
⊗0⊗Z ⊗XDIVIDE ⊗XSUBTRACT ⊗XIFLE
⊗XREMAINDER ⊗XMAXIMUM ⊗XIFGE
⊗XMINIMUM ⊗XIFGT
⊗XIFEQ
⊗XIFNE
Here are the current readonly variables. The names of readonly variables
CANNOT be abbreviated; and they all end with dot (.) to distinguish them
from macro names (which can occur wherever readonly variable names can).
For the purpose of these variables, the current character is the first
character on a line unless the command (from the above list) was given
from the line editor, in which case the current character is the one the
cursor was under when the command was given. The variables below that are
marked with an asterisk (*) do not take into account any changes so far in
the current line if the variable is being evaluated from the line editor;
thus these variables return the value that would result if <altmode> were
typed immediately (this effect may or may not be changed). The remaining
variables return the current accurate value even when given from the line
editor.
READONLY
VARIABLE VALUE
-------- ------
LINE. Number of the current line within the current page.
* LINES. Number of lines on the current page.
PAGE. Number of the current page.
PAGES. Number of pages in the file.
COL. Number of the current column, where 0 is the left margin.
COLS. Number of columns taken up by the current line.
COLINT. The current "column of interest" for the α; and α: commands.
CHAR. Number of the current character within the current line, where
0 is the first character in a line. There is a difference
between CHAR. and COL. if and only if there are tabs ahead of
the cursor in the current line.
CHARS. Number of characters in the current line, not counting the
CRLF at the end of the line. This value will be 0 if the
current line is empty and -2 if the current "line" is the end
of a page.
CORLIN. Number of the current line among all incore text.
* CORLNS. Number of lines of incore text (including incore pagemarks).
* CORCHS. Number of characters of space taken up by the incore text, not
counting nulls at the end of the final incore page.
* ROOM. Number of additional characters there is room for among the
incore text before expanding ("X") the page(s) is needed. The
sum of CORCHS. and ROOM. is the amount of disk space, in
characters, currently allocated to the incore text.
CORBEG. Number of the first incore page.
COREND. Number of the last incore page.
ASCII. Ascii character code for the current character. This will be
13 (decimal code for <cr>) if the current line is empty or if
the cursor is positioned at the end of the line. This value
will be 12 (decimal code for <ff>) if the current "line" is
the end of a page.
SIXBIT. Sixbit character code for the current character. This is made
from the ascii value by subtracting 64 (decimal) from ascii
character codes from 96 to 127 (decimal, inclusive) or 32
(decimal) from ascii character codes from 0 to 95 (decimal,
inclusive). Thus, the characters with ascii codes 0 through
31 (decimal) have negative sixbit codes.
TOPSIZ. Number of screen lines not used at top of screen (normally 2,
to allow for wholine).
BOTSIZ. Number of screen lines used at bottom of screen for typeout
and echoing (in the page printer).
WINSIZ. Number of screen lines used to display text (does not include
lines used for the header and trailer).
ATTSIZ. Number of lines currently attached.
ATTMAX. Maximum number of attached lines that will be displayed.
SSLINE. Current search limiting line number, for all incore text.
SSPAGE. Current search limiting page number.
SRCHAR. The character position of the place where the last search
string was found on the current line; this is the position
where the α<cr> command will take you if you aren't already in
the line editor. A value of 0 represents the first character
in the line, and a value of -1 means no successful search was
recently done ending on the current line.
WINTOP. The number of the top line in the current window, relative to
the first incore line (NOT relative to the current page).
STEP. The number of seconds per pause in autostepping of macros,
or a zero or negative number if autostepping is disabled.
EDLINE. This flag is 1 iff you are in the line editor editing a line
of text.
WFLAG. This flag is 1 iff the W flag in the header is on (page
changed).
NMODE. This flag is 1 iff the file is being edited in /N mode.
RMODE. This flag is 1 iff the file is being edited in /R mode.
IMODE. This flag is 1 iff you are currently in line insert mode.
RAPID. This flag is negative iff RAPID simulation of the line editor
by macros is disabled.
TERSE. This three-state flag is -1 when in TERSE mode, 0 in NORMAL
mode, and 1 when in VERBOSE mode.
SILENT. This flag is positive iff macro error messages are suppressed.
STOPHO. This three-state flag is -1 when in STOPALL mode, 0 in
STOPZERO mode, and 1 when in STOPONE mode.
CHECK. This flag is negative iff internal error checking of free
storage is disabled.
UNDMAX. This is the maximum number of characters that will be saved in
lines that can be undeleted.
UNDCHS. This is the current number of characters in lines that can be
undeleted.
UNDLNS. This is the current number of lines that can be undeleted.
AUTOBU. This is the current threshold of null records for autoburping.
This number is non-positive if autoburping is disabled.
BRKCOL. This is the current default column at which ⊗XBREAK will break
lines.
ECHO. This flag is negative if echoing of line editor input is
disabled.
MDEPTH. This is the current macro depth.
EXACT. This flag is positive iff searches will match only exact case
for letters (⊗XEXACT mode).
The following readonly variables can be used to examine the justification
margins. Those with the initial letter T are the margins for the ⊗X TJxxx
commands; those without the T are for the normal ⊗X Jxxx commands.
CMAR. TCMAR. Crown line indent (first line of paragraph).
LMAR. TLMAR. Left margin (amount of indentation for body of paragraph).
RMAR. TRMAR. Right margin; last column that will be used for text.
BNUM. TBNUM. Blank line count; number of blank lines between paragraphs.
CMARO. TCMARO. Old crown indent; a line with CMARO indentation is taken as
LMARO. TLMARO. starting a new paragraph, unless CMARO = LMARO.
There are three readonly variables for finding out how many occurrences of
the current search string were
(1) searched for: NFIND.
(2) found: NFOUND.
(3) substituted for: NSUBST.
in the last search (or substitution) command. If that search included at
least one successful substitution, then NFOUND. will be zero and NSUBST.
will be positive. If the last search did not do (but maybe tried and
failed) any substitutions, then NSUBST. will be zero and NFOUND. will be
the number of occurrences found (possibly zero). NFIND. contains the
requested number of search or substitution repeats. The only slightly
obscure case is a command like ⊗4⊗F...⊗\...αβ9<cr>, which asks to do 9
substitutions starting with the 4th occurrence; if less than 4 occurrences
are found, then NFIND. will be 4, NFOUND. will be less than 4, and NSUBST.
will be zero, but if 4 or more occurrences are found, then NFIND. will be
9 (NOT 4), NFOUND. will be zero (meaning we did some substitutions), and
NSUBST. will be the number of substitutions done.
GENERATING CHARACTERS FROM NUMERIC VALUES
The command ⊗#⊗XCHARACTER <numeric code for character> <cr> has the same
effect as typing ⊗#<character>. Note that any repeat arg for the extended
command is passed to the indicated character, which should be between '001
and '777 inclusive (and the low-order 7 bits must not be zero); thus the
CONTROL ('200) and META ('400) bits can be included in the character. The
⊗XCHARACTER command is primarily for macros that want to generate text
and/or commands from numeric calculations, but it can also be used to type
any command character(s) that your keyboard cannot otherwise input (e.g.,
if some key is broken). (Note that ⊗XCHARACTER isn't legal in the middle
of another command, so you can't always avoid typing a certain character.)
The character's numeric code can be entered as a constant (decimal, unless
preceded by right single quote (') which makes it octal); or it can be
entered as the name of a numeric macro or readonly variable, in which case
the value of the named entity will be used. Thus, the command
αβ2⊗XCHARACTER ASCII.<cr> will cause the current character to be typed
twice.
SPECIFYING FOLLOWING NUMERIC ARGUMENTS TO EXTENDED COMMANDS WITH
NUMERIC MACROS, READONLY VARIABLES, AND OCTAL CONSTANTS
Certain extended commands that normally take one or more decimal numbers
following the command name will accept the name of a numeric macro or
readonly variable in place of the decimal constant. For instance,
⊗XBREAK RMAR.<cr> will break the current line at the column that is the
right margin for the normal justification commands.
The same extended commands (see list below) will also accept an octal
constant instead of decimal. Octal is indicated by preceding the number
with a right single quote ('); for instance, ⊗XBREAK '177<cr>.
The commands that currently accept these alternative forms for a number
following the command name are:
⊗XBREAK
⊗XCHARACTER
Eventually almost all extended commands will accept these alternative forms.
*** ADDITIONAL COMMANDS RELEVANT TO MACROS ARE EXPLAINED ON THE NEXT 2 PAGES. ***
Macros and Command Files: ⊗XEXECUTE ⊗PUTDEFS ⊗XCOMMENT ⊗XATTACH ⊗XREDEFINE
(See previous two pages and following page for more on macros.)
Modes Command Meaning
N ATTACH Place an editable macro definition in the attach buffer
N,A,E COMMENT No-op, useful for putting comments in command files
N,A,E EXECUTE Read and execute commands from a file
N,A,E PUTDEFS Append all current macro definitions to a cmd file
N,A REDEFINE Define a macro from incore page or attach buffer
EXECUTING COMMANDS FROM A FILE
To allow macro definitions and other often used commands to be carried
out automatically, the ⊗XEXECUTE command causes a set of commands to be
read in from a specified command file and then executed. The form of
this command is
⊗XEXECUTE <filename> ( <page range> ) <cr>
where <filename> and the parentheses and <page range> are optional. This
causes the selected pages in the named file to be read into a macro whose
name is the file's primary name preceded by a dot; then this "file macro"
is expanded just like any other macro. (See note below on automatic use
of a leading character other than dot for the macro name, if the macro
name with a dot already exists.) If the <filename> is omitted, the last
execute filename given is used; if no previous execute filename has been
given, then the default filename is used: EINIT.CMD on your LOGIN disk
area (not your ALIAS!). If a <filename> without an extension is given in
the ⊗XEXECUTE command, the default extension .CMD is used. With a zero
argument, this command
⊗0⊗XEXECUTE<cr>
will just type out the current default execute file. The <page range> can
be either a single decimal page number, or a pair of numbers separated by
a colon, (for example, 3:4). Note that multiple page ranges (such as COPY
allows) are not permitted. In the filename, it is legal to omit any parts
and have the defaults used; for instance, you can specify just the PPN
or just the extension or just the primary name or just the device, or any
combination of these.
The ⊗XEXECUTE command ignores E directories and SOS line numbers and
accepts the standard and alternate representations to allow for input of
the CONTROL and META bits and non-printing characters from command files.
These representations, which use "⊗" as an escape character, are explained
on p. 25.
To avoid having the ⊗XEXECUTE of one file aborted when a command file
executes another command file of a similar name, the ⊗XEXECUTE command
tries to avoid duplicating a macro name that already exists. This command
makes up a name for the macro to represent the file being executed,
normally by inserting a dot (".") in front of the the primary name of the
file (e.g., ".EINIT"). But if that macro name already exists (because you
are executing one file from another, both with the same primary file
name), then, in order to generate a unique macro name, the leading
character is incremented from "." to "/", and then, if still necessary,
through the characters "./0123456789:;<=>?@".
WRITING MACRO DEFINITIONS INTO COMMAND FILES: THE ⊗XPUTDEFS COMMAND
The extended command
⊗XPUTDEFS <filename><cr>
writes all macro definitions into the file given, or into the default file
if no filename is specified. If the file already exists, it is extended
with a new page added. If the file doesn't exist, it is created with an E
directory. This command has the same default file (initially EINIT.CMD on
your LOGIN disk area) and default file extension (.CMD) as the ⊗XEXECUTE
command. The definitions are written out using the standard
representation, which is explained on p. 25.
COMMENTS IN COMMAND FILES
The recommended way of including comments in a command file is to use one
of the escape sequences "⊗;" and "⊗⊂" to indicate that the text following
is to be ignored as the file is read. In this way, the comments can be
included without having to be taken as commands to be executed. The form
"⊗;" allows you to put a comment at the end of a line, and the form "⊗⊂"
allows you to have partial-line or multi-line comments (see p. 25 for
details).
Note that since TABs are ignored, you can use them to set off comments or
commands from other text in a command file. However, spaces are not
ignored, so if you use them (outside a comment), they will appear in the
text to be executed.
The ⊗XCOMMENT command can also be used for inclusion of comments in a
command file, but it is actually stored (e.g., in macro definitions) and
executed, so it can only occur where a normal command can occur;
furthermore its use should be avoided inside a macro definition, since it
needlessly increases the size of the macro and slows it down a little.
The ⊗XCOMMENT command does nothing; it ignores the entire command line.
Thus the following command does nothing inside a command file.
αβXCOMMENT This is a bunch of text that can occur on many lines in
a command file. It might, for example, document what nearby text
does. This command should be ended with a carriage return, which
in a command file must occur as the two characters circle-x and
double arrow! Any ALPHA character inside a COMMENT command line
in a command file must be quoted (as "⊗α") or it will generate the
CONTROL bit on the next character and terminate the COMMENT
extended command line. Similarly any other character combination
that generates an activation character (like linefeed or altmode)
will terminate the COMMENT command. ⊗↔
ATTACHING/EDITING/REDEFINING MACROS
The ⊗XATTACH and ⊗XREDEFINE commands can be used to edit and redefine
macros. The ⊗XATTACH command loads the attach buffer with the definition
of a macro in standard representation (see p. 25), thus allowing you to
put the text into the current file and edit it. The ⊗XREDEFINE command
(re)defines a macro from incore text, using the standard and alternate
representations. The forms of these commands are
⊗XATTACH <macro name><cr>
⊗#⊗XREDEFINE <macro name><cr>
where the blank macro name will be used if <macro name> is omitted and the
argument (#) to ⊗XREDEFINE determines how many lines (starting at the
current line or at the first line of the attach buffer) are used as the
source of the macro definition. As usual, a negative argument represents
lines before the current line. If no argument is given to ⊗XREDEFINE, the
whole page or whole attach buffer is used as the macro definition source.
The ⊗XATTACH command cannot be given when there is already some text
attached.
*** ADDITIONAL COMMANDS RELEVANT TO MACROS ARE EXPLAINED ON THE NEXT PAGE. ***
Debugging macros: ⊗XSAY ⊗XAUTOSTEP ⊗XSTEP ⊗&
(See previous three pages for more on macros.)
Modes Command Meaning
N,A,E ⊗& Step macro execution # steps
N,A,E AUTOSTEP Set or read autostepping time for macros
N,A,E SAY Type out text and/or decimal number
N,A,E STEP Step macro execution # steps
TYPING OUT INFORMATION (E.G., FROM WITHIN A MACRO)
The command ⊗XSAY simply types out (1) the text on the command line after
"SAY " and then (2) the decimal repeat arg, if any. The typeout is ended
with a <crlf> if and only if αβX is used in the command. This command can
be useful inside macros to report the status of the macro execution, but
it works outside of macros as well.
UPDATING THE DISPLAY DURING MACRO EXECUTION
The ⊗#⊗V command causes E to update the display immediately and then pause
# seconds. If the ⊗# is omitted, then E will merely update the display
without pausing. These commands can be useful for watching the progress
of a macro.
DEBUGGING MACROS BY STEPPING
Some facilities are provided to allow the user to debug even complicated E
macros. With these facilities, it is possible to step through macro
expansion (possibly pausing a little at each step) while having the
display updated to see the result of each step or of selected steps in the
macro expansion. While E is stepping a macro, it will type out the
characters of each step just before that step is carried out. Whenever E
is pausing at a certain macro step, ESC I will, as usual, immediately
abort all macros in progress. When a macro step pause occurs from the
line editor, the display of the line editor text will be done by E and a
cursor will be displayed at the proper character within the line. This
pausing in the "line editor" can be identified on DDs and IIIs by the
slightly wider cursor and on DMs by the "line editor" text NOT being
displayed in BOLD; this is to avoid fooling you into thinking that the
macro has ENDED in the line editor.
A macro step generally involves one complete E command -- for instance not
just ⊗X but a whole extended command line when ⊗X is encountered.
However, any sequence of all line editor commands given from WITHIN the
line editor, none of which would activate the line editor, is treated as a
single step along with the first (complete) command that does activate the
line editor. Such a sequence does not include the command that made E
enter the line editor; that command is taken as a separate step.
Exception: If the command that enters the line editor is α<tab> or αI,
then no step occurs at that point because it would cause loss of line
editor status (being at end of line or in line editor insert mode).
The ⊗#⊗XAUTOSTEP command enables a mode in which EVERY macro called is
executed by pausing # seconds after each step. See the paragraph above
for what constitutes a single step. The command ⊗-⊗XAUTOSTEP disables
this mode of automatic stepping of macros, and ⊗0⊗XAUTOSTEP reports the
status of this mode. The readonly variable STEP. contains the number of
seconds per pause, or a zero or negative number if autostepping is
disabled.
For manually stepping macros, there are two commands available:
⊗#⊗XSTEP <optional macro name> <cr>
⊗#⊗&
The extended command version optionally takes a macro name following the
command name; if a macro name is given (the blank name is not permitted),
then this command will call that macro and execute # steps before
stopping (a repeat arg of 1 will be used for this macro call). If no
macro name is given with ⊗XSTEP, or if the command ⊗& is used, then macro
execution is RESUMED (where it previous left off) for # steps (where # is
the argument to the command); thus when macro execution has been
interrupted, you can single step the remainder of the macro(s) with the
⊗& command. Another difference between ⊗& and ⊗XSTEP is that the latter
will cause an explicit message to be typed out when the given number of
steps have been executed -- "Stepping done, in <macro name>"; this
message is always suppressed for the ⊗& command and by Terse mode with
the ⊗XSTEP command. Note that if you give one of the stepping commands
while in AUTOSTEP mode, E will still pause after each step, but it will
quit stepping when the stepping count has been exhausted.
BOOK MODE (/B) and the BOOK command
Book mode (/B) in E provides some special features for editing files,
especially files which are really books in disguise. The main feature
of book mode is that you cannot alter a file open in this mode. In
addition, the BOOK command allows you to read a file in book mode over a
long period of time without having to explicitly remember your place in
the file. Your place will be saved in a .BKP file.
You get into book mode by following the filename with /B when you are
starting to edit, or by using the BOOK command to edit the file.
1. In /B mode, E will never permit you to alter the file you are
editing; you cannot change to READONLY mode or READWRITE mode from /B
mode. In /B mode, if you change part of a page and try to write out
the new version, E will simply remind you that you cannot alter the
file.
2. To help you keep your place in a book-file you are reading, E
keeps a special psuedo-SNAIL file on your area. This file will have
the name <filnam>.BKP, where <filnam> is the primary name of the
book-file. Note that the .BKP file is NOT a SNAIL file (although it
is in SNAIL file format), and thus will never be deleted by LOGOUT.
This .BKP file will contain the page number and line number at which
you were editing the book-file the last time you exited from E. E
will neither look for nor write a .BKP file unless you have started E
with the monitor command BOOK, which automatically starts E in /B
mode looking for a .BKP file. Furthermore, when you start E with the
BOOK command, if you use either of the /L or /P switches, E will
not read or write any .BKP file. And if you start E with just the
BOOK command without any argument, then unless there already is
a .BKP file on your area, no new .BKP file will be written.
3. The BOOK command with an argument (and without either of the /L
and /P switches) will look for a .BKP file with the given name and
PPN. If that .BKP file is not found, E will look for the .BKP file
on your current ALIAS area and then on your logged-in area. If a .BKP
file is found, it is used and updated when you exit. Otherwise, a
new .BKP file will be written onto your (ALIAS) area when you exit.
4. Whenever you use E in /B mode, it will reference TMPCOR files with
the name BK instead of ED. Thus you can switch back and forth
between editing some program and reading a book by alternately giving
the no-argument monitor commands ETV and BOOK (provided you have once
given the filenames). In /B mode, E will display "/B" following the
filename at the top of the screen.
5. When you have finished reading a book-file, E will delete the
<filnam>.BKP file automatically. E will think you have finished
reading the book if and only if you are on the last page of the file
when you exit.
- - - - -
The complete book WUTHERING HEIGHTS by Emily Bronte is available for
general reading in the file WUTHER[LIB,DOC]. To begin reading it,
simply give the monitor command:
.BOOK WUTHER[LIB,DOC]
Then when you exit from E, the file WUTHER.BKP will have been written
onto your (ALIAS) disk area with the numbers of the page and line
where you were last reading. To continue reading the file later
during the same login session (and with the same ALIAS as before),
simply say:
.BOOK
which will read in the TMPCOR file BK for your current ALIAS. When
you exit again, the TMPCOR file and the .BKP file will be updated.
To continue reading after you have logged out and back in, say:
.BOOK WUTHER
which will cause E to find your .BKP file, which itself will contain
the name of the book-file WUTHER[LIB,DOC].
Some other book-files will be found on the [LIB,DOC] disk area, including
GRIMM which is Grimm's Fairy Tales.
- - - - -
To read a file in /B mode without having the <filnam>.BKP file read
or written, use the /B switch explicitly:
.ETV <filename>/B
E files extended by other programs. ⊗XUPDATE ⊗-⊗XUPDATE
Modes Command Meaning
N,A UPDATE Write out the updated incore directory
E can handle easily almost any file that has been extended by another
program even though the directory has not been updated by that program.
The single restriction is that the file must remain in correct E format
with Formfeeds occurring only as the first character in a record. MAIL
extends E-format files in this way.
When E encounters a file that is longer than the directory indicates, the
file is read from the last indicated page to the end of the file to make
sure that the file is properly formatted. If the file is formatted ok,
then E generates in core an updated version of the directory, including
directory lines for any new pages added to the file. The updated
directory is normally not written out onto the disk until some command
forces one or more other pages to be written on the disk. Furthermore,
in /-U mode (see the /-U switch on p. 20), the writing out of the updated
directory is suppressed even when normal text is being written out.
When E opens a file that has been properly extended in the above manner,
it reports the number of pages that have been added to the file, or, if
none, the number of records by which the last page has been extended.
Also, if any pages have been added, the default position within the file
(at which E will place you if you gave no specific page number in a /#P
switch) is the first newly added page.
As long as an updated directory remains not written out onto the disk, a
"U" (for update) is displayed on the top line of the screen. The first
time any page is changed and written out when not in /-U mode, or if the
⊗XUPDATE command is given, the updated directory will be written out and
the "U" will disappear.
⊗XUPDATE Go into /U mode (if formerly in /-U mode); see the /-U
switch on p. 20. Also, if the directory needs updating on
the disk, then write it out now; and in that case, also
write out the current page if it has changed since it was
last written out.
⊗-⊗XUPDATE Go into /-U mode. This disables normal updating of the
directory that would occur when (1) a directory line
changes or (2) the file is extended beyond what the
directory page formerly indicated. This command applies
only to the current file, and then only until you switch
to another file (unless /-U is given again). That is, it
is NOT a permanent mode, even for the particular file.
See the /-U switch on p. 20 for details of /-U mode.
⊗0⊗XUPDATE Just report whether or not /-U mode is in effect.
Filenames, numeric extensions, and filehacks
FILENAMES
If the filename you select to edit does not include an extension, then
E will first look for the file with the null extension. If that file
does not exist, E will edit the file (with the given primary name and
PPN) that has the "best" extension. The "best" extension is found by
checking extensions against E's ordered list of good extensions (see
the good list below). If no good extension is found, E will edit the
first file it finds in the UFD that has the right primary name and any
extension except those in E's bad extension list (see bad list below).
To edit a file with a "bad" extension, you must type the extension
explicitly unless the file with the "bad" extension is the only file in
that disk area with the given primary name.
If you omit the programmer name from the PPN in a filename, E will use
your current alias programmer name. If you omit the project name, E
will use your current alias project name.
Good extension list: FAI,S1,SAI,FOR,F4,LSP,PUB,POX,TEX,MAC,MID,
VLI,LAP,PAL,AL,MF,TFD,MIC,WRU,NSA,OSA,PAS,
LST,CMD,DO,MSG,TXT
Bad extension list: REL,DMP,XGP,FNT,CFT,TFX,DRW,WD,PC,WPC,PLT,
PCP,PLX,LDI,RIM,FAS,VRN,PIC,BIN,WL,WLS
(If you want some extension added to either list above, mail a message
to BUG-E, describing what kind of files the extension is used on.)
NUMERIC FILENAME EXTENSIONS
You can ask E to edit the file with a given primary name and the
greatest numeric extension by giving the extension consisting of just a
greater-than sign (">"). For example,
ET FOO.>
will edit the file (with primary name FOO) whose extension is the
largest (purely) numeric value. E.g., if only FOO.20 and FOO.100 exist,
then ET FOO.> will edit FOO.100. If no file is found with a numeric
extension, then ET FOO.> will report File Not Found: FOO.>.
When the filename extension .> is given for a file that has to be created,
the extension of the newly created file will be generated by incrementing
the largest previously existing numeric extension found (with the given
primary file name). That is, if you say, for example, ⊗ε FOO/C or
⊗ε FOO.> ← BAZ and if you already have files FOO.1 and FOO.2, then the
new file created (or copied from BAZ) will be called FOO.3. If leading
zeroes were present in the previous largest numeric extension, then they
will be present in the new extension. If the previous extension was .999,
then the new extension will be .000. If you say ⊗ε FOO.> ← FOO.> and
if you already have FOO.1 and FOO.2, then FOO.2 will be copied to FOO.3
and E will then edit FOO.3.
FILEHACKS
The following filehacks, also usable with the COPY program, are
available in E as filenames. The file represented by each is indicated
below; all these files are on the [2,2] disk area. A filehack consists
of a backslash followed by a name from the list below; the name may be
abbreviated by as many letter as necessary to identify it uniquely
(current abbreviations are given below). A filehack takes the place of
the filename and can be followed by the usual switches. Note that some
of the files below are not usually maintained in E format; beware.
Some of these filehacks imply /R mode. These are indicated in the list.
To override a default /R mode, you can explicitly specify /-R after the
filehack.
FILEHACK ABBR /R? FILE
\MAIL \M No The current user's mail file.
\MSG \M No The current user's mail file.
\PLAN \P Yes The current user's plan file.
\PLN \P Yes The current user's plan file.
\NAP \NA Yes The current user's NS notifications file.
\NS \NS Yes The current user's NS notifications file.
\BBOARD \B No The system bulletin board file: BBOARD.TXT[2,2].
\GRIPES \G No The system gripe file: GRIPES.TXT[2,2].
\GOLD \GO No The file of old system gripes: GRIPES.OLD[2,2].
\NOTICE \NO Yes The system message file: NOTICE.TXT[2,2].
\NEWS \NE Yes The current NYT news summary.
\DIGEST \DI Yes The current AP news digest.
\DOWN \DO Yes The system downtime forecast file.
\DAY \DA Yes The message-of-the-current-day file.
\FORWARD \F Yes The forwarding file for the MAIL system.
The filehacks \MAIL, \MSG, \PLAN, \PLN, \NAP and \NS can have an
explicit programmer name specified, in which case the mail, plan, or
notification file for the named programmer is read instead of your own.
To specify a programmer name, follow the filehack name immediately with
a colon (:) followed by the desired programmer name. For instance,
\MAIL:FOO represents FOO's mail file, and \PLAN:BAZ is BAZ's plan file.
The ⊗XPOINTER command will recognize these programmer-name filehacks (as
well as the normal filehacks). The filehack names themselves can be
abbreviated as usual (e.g., \M:FOO is FOO's mail file). The
programmer-name filehack facility is designed for non-display users,
since display users could already enter a filename like ∂FOO or
∂BAZ.PLN.
EDITING THE E MANUAL FILE, E.ALS[UP,DOC]
The special filename consisting of just a question mark ("?")
represents the name of the E manual (this file). Thus the monitor
command
ETV ?<cr>
will cause E to edit this manual file in readonly mode. When you are
already in E, the command ⊗? will switch to the E manual file; see p. 15.
Generating a new directory line: ⊗XNDFAIL ⊗XNDSAIL ⊗XNDBBOARD
Modes Command Meaning
N NDBBOARD Make a New Directory line for a page in \BBOARD
N NDFAIL Make a New Directory line (FAIL type) for page
N NDSAIL Make a New Directory line (SAIL type) for page
Two commands ⊗XNDFAIL and ⊗XNDSAIL generate and insert a new first line of
the page (called the directory line) in appropriate FAIL and SAIL formats
for labels and for specified categories.
These commands apply to the current page. If more than one page is in
core (through the use of ⊗XAPPEND or β<ff> commands) then the information
will be gathered only from the page containing the arrow line and the new
line will appear at the start of this page. Other pages in core at the
time will be unaffected.
The ⊗XNDSAIL command may be used as an information source in a variety of
different ways. It is not intended for use with text material.
⊗XNDFAIL Generate a New Directory line for the current page for a
FAIL-type (or MACRO-type) source file. All symbols
defined on the current page will be listed in the new
directory line, with the following restrictions:
(1) The symbol definition must be the first thing on a
line (not counting spaces and tabs). Thus only one
definition per line will be noted.
(2) The symbol itself must not be over 20 characters long,
can contain only letters, digits and the characters
".%_$", and must be followed by colon (:), left-arrow
(←) or equals-sign (=). Thus, normal labels and
assignments (in either FAIL or MACRO) will be noted.
This command ignores down-arrows (↓) at the beginning of a
symbol and can be made to list only symbols defined with
a certain number of up-arrows (↑), depending on what
activation character ends the ⊗X command line.
Activator Symbols listed
<cr> All symbols detected (as described above).
α<cr> Symbols defined with at least one up-arrow (↑).
αβ<cr> Symbols defined with at least two up-arrows (↑↑).
The ⊗XNDFAIL command does not take a repeat argument
(unlike ⊗XNDSAIL below). The command ⊗0⊗XNDFAIL (with a
zero repeat argument) will issue a warning message (not an
error) without doing anything else.
⊗XNDSAIL Generate a New Directory line for the current page for a
SAIL-type source file.
Given with a <cr> termination, this command lists all
words that are preceded by certain category words, the
default words being RECORD!CLASS, RECORD_CLASS and
PROCEDURE.
Having found a category word, E lists the first word
following the category word and then ignores any following
text until either a comma or a semicolon is encountered.
When a semicolon is encountered, the search for a new
category word is resumed. If, on the other hand, a comma
is encountered (not however within parentheses) then the
next word is taken as another example of the category and
it is listed, preceded by a comma. Listings following
different category words are separated by spaces.
The default categories may be augmented or replaced by any
desired categories up to the limit of 4 categories, as
outlined below.
(1) One additional category may be specified by typing its
name after a space following the command name and
terminating it by a <cr>.
(2) Up to 4 new categories may be specified (separated by
commas) with the categories after the first one
replacing the default categories, one by one. To
retain some default categories the list is terminated
by a <cr>.
(3) If the typed list of categories is terminated by ⊗<cr>
then only the typed categories are used, and the
default ones are eliminated.
(4) If the command is terminated by ⊗<cr> without any
typed category names then the original default
categories are reinstated.
The command ⊗0⊗XNDSAIL (with a zero repeat argument) will
accept any typed categories and then will list the
categories that are in effect without generating a text
line.
UPDATING EDIT DATE IN \BBOARD FILE: ⊗XNDBBOARD
The command ⊗XNDBBOARD (New Directory-line for \BBOARD) generates a new
directory line for the current page from the old directory line, assuming
it is in the MAIL message header format or the ⊗XNDBBOARD format. These
two formats are distinguished by whether the first space in the line is
followed by a second space. If so, then is MAIL format and this command
flushes the original time from the header and inserts the current date and
the current user's programmer name after the original programmer name. If
the old directory line was already in ⊗XNDBBOARD format, then the update
date is replaced by the current date and the updating programmer name is
replaced with the current user's programmer name. No guarantees are made
about what this command will do with a page whose first line is in any
other format. Note that this command does not delete the old header line
(the user should do that himself), but it does replace any initial
partial-sign (∂) in that line with a greater-than sign (>) to make sure
the ⊗∂ command will still work on the whole message.
Altering the use of the display screen: ⊗XTOPSET ⊗XBOTSET ⊗XATTSET ⊗XHEIGHT
Modes Command Meaning
N,A,E ATTSET Set max number of lines used to display attach buffer
N,A BOTSET Set number of lines used at bottom for page printer
N,A HEIGHT Set the number of lines used for text display
N,A TOPSET Set number of lines E skips at top (e.g., for wholine)
The four commands ⊗XTOPSET, ⊗XBOTSET, ⊗XATTSET and ⊗XHEIGHT determine how
E allocates areas on a display terminal's screen. Each of these commands
sets one display size parameter from the numeric argument to the command,
as follows: (1) if an unsigned argument is given, the parameter is set to
the given value; (2) if a relative argument is given (⊗-⊗# or ⊗+⊗#), then
the corresponding parameter is changed by the given amount; and (3) if the
command is given without any argument, the corresponding parameter is
reset to it default value. However, the various display size parameters
must fall within certain ranges; any attempt to set a parameter outside
its range will set that parameter to the nearest limit of the range.
The range for a given parameter is generally dependent on the current
settings of the other parameters. In particular, the ⊗XHEIGHT setting
must be at least two lines bigger than the current ⊗XATTSET value (so that
at least two non-attached lines can be displayed at any time); and since
⊗XTOPSET and ⊗XBOTSET implicitly change the ⊗XHEIGHT setting (see
descriptions below), ⊗XTOPSET and ⊗XBOTSET are limited by the restriction
that the ⊗XHEIGHT area must be at two lines bigger than the current
⊗XATTSET value.
Now here are the commands to set the display size parameters.
⊗#⊗XTOPSET Set the number of lines E skips at the top of the screen
(e.g., to leave room for the wholine). Any decrease
(increase) in the number of lines skipped at the top
results in a corresponding increase (decrease) in the
number of lines used to display incore text (see ⊗XHEIGHT
below). Thus, ⊗0⊗XTOPSET can be used to make E utilize
the 2 lines normally left for the wholine. Whenever the
number of lines skipped at the top becomes less than two,
E turns off your wholine to avoid having it overwrite E's
display, but E remembers that it has turned the wholine
off and will turn it back on when the top two lines are no
longer in use (e.g., upon exit, or upon ⊗2⊗XTOPSET).
⊗#⊗XBOTSET Set the number of lines E uses at the bottom of the screen
for the page printer (where typeout and echo of input go).
Any decrease (increase) in the number of lines used for
the page printer results in a corresponding increase
(decrease) in the number of lines used to display incore
text (see ⊗XHEIGHT below). This command is useful, for
example, when you are debugging some macros that cause
various things to be typed out which you don't want to go
quickly off the top of the page printer (use, say,
⊗9⊗XBOTSET). This command is also useful for getting one
more line for incore text display (use ⊗2⊗XBOTSET -- 2 is
minimum size; however, this may cause some of E's
occasional information typeout to go off the page printer
immediately upon being typed out. The default is 3 lines.
⊗#⊗XATTSET Set the maximum number of lines E will use for displaying
the attach buffer. This is useful when you want to
examine more of the text in the attach buffer than is
normally displayed, without putting the attach buffer down
on the page (use, say ⊗∞⊗XATTSET). This is also useful
when you have several lines attached, but you don't want
their display to distract you from the display of the
normal text on the page (use ⊗1⊗XATTSET, but notice that
if there is more than one line attached, E will display
the attach buffer only as one line of ". . ." without even
a vertical bar to remind you of the attach buffer). The
default maximum attach buffer display is 8 lines, and the
biggest allowed maximum attach buffer display size is 2
lines smaller than the current incore text display area
(see ⊗#XHEIGHT below).
⊗#⊗XHEIGHT Set the maximum number of lines E will use for displaying
incore text (including any attach buffer), not counting
the header and trailer lines. This command is sometimes
useful for reducing the time taken to display a full
window on a Datamedia (⊗XBOTSET can also be used for that
purpose), but it can also be useful if part of your
display's screen doesn't work properly (use this command
to shrink the size of the area used for incore text, and
possibly use ⊗XTOPSET to position E's display in the
working part of your screen); this command can sometimes
be used to reduce flicker on your III by reducing the size
of the text display area. The text display area must be
at least 2 lines bigger than the current maximum attach
buffer display size (see ⊗XATTSET above). The default is
to display as much text as will fit on your screen.
αβS. ⊗N,⊗O,⊗H: Line, Page & File stacks. ⊗XHOME ⊗XBACKGO ⊗XZFILES ⊗XZPAGES ⊗XZLINES
Modes Command Meaning
N,A αH Go to previous file in file stack (Home)
N,A αβH Go to Nth previous file, where N is current default arg
N,A ⊗0αH Type out file stack
N,A ⊗0αβH Type out default arg for αβH command
N,A ⊗#αH Go to #th previous file
N,A ⊗#αβH Go to #th previous file and set default arg to #
N,A ⊗-⊗#⊗H Go to #th previous file and pop # files off top of stack
N,A ⊗+⊗#⊗H Re-push # files back onto top of stack and go to new top
N,A αN Go to previous line in line stack
N,A αβN Go to Nth previous line, where N is current default arg
N,A ⊗0αN Type out line stack
N,A ⊗0αβN Type out default arg for αβN command
N,A ⊗#αN Go to #th previous line
N,A ⊗#αβN Go to #th previous line and set default arg to #
N,A ⊗-⊗#⊗N Go to #th previous line and pop # lines off top of stack
N,A ⊗+⊗#⊗N Re-push # lines back onto top of stack and go to new top
N,A αO Go to previous page in page stack
N,A αβO Go to Nth previous page, where N is current default arg
N,A ⊗0αO Type out page stack
N,A ⊗0αβO Type out default arg for αβO command
N,A ⊗#αO Go to #th previous page
N,A ⊗#αβO Go to #th previous page and set default arg to #
N,A ⊗-⊗#⊗O Go to #th previous page and pop # pages off top of stack
N,A ⊗+⊗#⊗O Re-push # pages back onto top of stack and go to new top
N,E αβS Re-edit the last line edited, at column were activated it
N,A BACKGO Go back to page that you last came from (see ⊗O cmd)
N,A HOME Go to relative or absolute page in Home file
N,A ZFILES Zero (clear) the file stack (and filelist)
N,A ZLINES Zero (clear) the line stack
N,A ZPAGES Zero (clear) the page stack
RE-EDITING THE PREVIOUSLY-EDITED LINE: αβS
The αβS command returns you to the last line you edited, if it is still
on the incore page at the place where you edited it. This command
positions you at the column where you were when you left that line and
can be given from the line editor to take you back to a previously edited
line; thus it can be used to alternate between line editing of two
different incore lines. Note also that this command is useful if you
left the line editor accidentally. However, if you left the line editor
with <cr> or α<cr>, then this command will position you at the end of
that line, since it appears to E that that is where you typed the <cr>
(the system places such a <cr> at the end of the line). Also, line edits
that you flushed with <altmode> cannot be gotten back into with αβS; only
line edits whose final text is accepted by E can be re-entered this way.
Any altering (such as by substitution or justification) of the last line
edited prevents this command from getting back into that line.
The position of the last line edited is updated for all line insertions
and deletions, but if you have since attached the last line edited, then
this command will succeed only if you have put that line back where it
came from (e.g., with αβR). If you have deleted the last line edited,
then you cannot get into it with this command even if you have undeleted
it and placed it back where it came from.
On non-displays, this command goes back to the last line typed in
(inserted) but of course doesn't edit it.
THE LINE, PAGE, AND FILE STACKS
The commands ⊗N,⊗O,⊗H make use of three corresponding "stacks" of places
you've been at recently: the LINE STACK (⊗N) of lines currently in core,
the PAGE STACK (⊗O) of pages NOT currently in core, and the FILE STACK
(⊗H). Each of the ⊗N,⊗O,⊗H commands works with the corresponding stack;
all of these commands interpret arguments in the same way and all
distinguish between α<cmd> and αβ<cmd>. You can return to the #th
previous place, and/or you can "Pop" # places off the stack, and/or you
can "re-Push" # places back on the stack.
The ⊗XBACKGO command is identical with the ⊗O command.
In the descriptions that follow, any sentence referring to "the stack"
should be taken as applying to each of the three stacks. The word
"place" is used to mean "line", "page", or "file", depending on which
stack is being considered. The current place is always at the top of
the stack.
The basic forms of these three stack commands are the "single-bucky" (α)
commands αN, αO, and αH, which, respectively, will take you back to the
previous line, page, or file. If a simple numeric argument ⊗# is added,
then you will go back to the #th previous line, page, or file (e.g.,
⊗3αH will take you to the third previous file). If you give an argument
greater than the current size of the stack, then you will end up at the
place formerly on the bottom of the stack.
The double-bucky (αβ) forms of these commands (without arguments: αβN,
αβO, and αβH) are just like the single-bucky forms except that the
current default argument for the command is used. The default arguments
(kept separately for each of the three commands) are all initially 2.
Thus, for example, αβO will initially take you back to the second
previous page. The default argument for a double-bucky command is
changed by typing the double-bucky command with the desired future
default. Note that this both sets the default argument and executes it!
For example, ⊗5αβH takes you to the fifth previous file and sets the
default arg for subsequent αβH commands to 5.
Note that with the default argument set to some number J, repeated use
of the double-bucky command with no argument will cause you to loop
through J+1 places. Thus when you are working on J+1 pages (or lines
or files) which you want to loop through, it is useful to set the
default arg to J.
You can find out what is on any of the stacks or what the default arg is
for any of the double-bucky commands by using an argument of zero (⊗0).
A zero arg with a double-bucky command types out the default arg for the
double-bucky command. A zero arg with a single-bucky command types out
the corresponding stack, including the current place (which is at the
top of the stack). Thus ⊗0αN types out the line stack and ⊗0αβO types
out the default arg for the αβO command (without executing it). The
⊗0αH command also types the stack level of each file so that you know
what argument to give the αH command to get to any file listed.
Since the lists of recently visited places have been called stacks,
there must be some stack adjusting operations -- and there are. Except
when one of the below stack adjusting operations has been used, the
"stack" is really an ordered list of the most recently visited DISTINCT
places. The list is ordered by the recentness of your being at each
place, and the places are kept distinct by removing from the middle of
the stack any entry for the place you are currently at. The current
place is always the top entry in the stack.
The STACK ADJUSTING OPERATIONS all involve a RELATIVE argument being
given to one of the ⊗N,⊗O,⊗H commands. There are two possibilities:
the relative argument can be negative (⊗-⊗3) or positive (e.g., ⊗+⊗4)
(note that ⊗5 is not a relative argument). Negative arguments cause
"Popping" of places off the stack and positive arguments cause
"re-Pushing" of places back on the stack. The default value for a
relative arg is one (i.e., ⊗+⊗N means ⊗+⊗1⊗N, and ⊗-⊗O means ⊗-⊗1⊗O).
You cannot pop or re-push more places than there are on the stack.
A NEGATIVE RELATIVE argument causes the given number of places to be
"Popped" off the top of the stack and the user is moved to the new top
of the stack. This is useful if, having gotten somewhere, you decide
you're not interested in remembering that place on the stack and you
want to go back to some previous place. For example, ⊗-⊗N (default
number is 1) will take you back to the previously remembered line and
not leave an entry for the current line just one below the new top of
the stack (as αN would). Actually, when you "pop" a place off the
stack, it is remembered (for the "re-push" command) by putting it on the
bottom of the stack.
A POSITIVE RELATIVE argument (e.g., ⊗+⊗4) causes the given number of
places to be "re-Pushed" onto the top of the stack from the bottom of
the stack and you are then moved to the new top of the stack. This is
mainly useful if you have just popped one or more places off the stack
and then decide you want another look at such a place. For example, if
you do a ⊗-⊗N, then doing a ⊗+⊗N immediately will undo the ⊗-⊗N
(including both returning you to a particular line and restoring the
stack to its previous state). Of course, if you haven't popped anything
off the top of the stack, then what gets pushed onto the top isn't
really "re"pushed after all, but is just whatever happened to be sitting
at the bottom of the stack.
Now for some details pertaining to particular stacks.
The line stack:
The line stack only remembers lines that are more than four (4) lines
away from each other. (Remember, the current line is the top of the
stack.) Thus moving down the page by ⊗> does not leave a trail of
remembered places, but in fact flushes from the middle of the line stack
the entries for any lines that are approached (within four lines).
When you go to a different page (not already in core), your line stack
is lost irretrievably. It is not restored when you return to a
previous page.
Entries in the line stack are corrected for line insertions and
deletions, including those resulting from the attach and justification
commands. The ⊗XCANCEL command preserves the current line stack without
attempting to un-correct entries for lines previously inserted or
deleted, but it flushes entries for lines that no longer exist (i.e.,
are beyond the new last line in core).
Multiple consecutive FF and VT (and ⊗W) commands do NOT remember (on the
line stack) intermediate stopping places. But ANY command besides FF,
VT, ⊗W, and ⊗0⊗N will cause the current line to get remembered. While
you are FF/VTing around a page, the αN command will take you back where
you started the current string of FF/VT commands (even if you are
already there!) and will remember, of course, the line you are leaving.
With each line in the line stack, E remembers the window position that
existed when you left that line. When you return to a line via ⊗N, the
old window position associated with that line is restored unless the line
was already on the screen, in which case the window is not changed.
The page stack:
Each entry in the page stack contains not only a page number, but also
the line number and window you were at when you left that page. The
⊗O command restores this line number and window.
When you return to a previous file (whether by number or by explicit
filename), the top part of your page stack from that file is restored
along with all line marks from that file.
If you ⊗XAPPEND to the current incore page(s) a page that was remembered
on the page stack, its entry in the stack is flushed since the page is
now in core.
The file stack:
Whenever you return to a previous file with one of the ⊗H, ⊗ε, ⊗λ and ⊗?
commands, the file is opened in the mode that you were in when you left it
(e.g., /N), and at the page and line where you were when you left it. The
window position is also restored. Whenever you return with the ⊗H
command, your Readonly/Readwrite mode is restored to its previous state
for that file. If you return to a previous file by using the ⊗ε or ⊗λ
command without an arg (and typing the filename explicitly), you can
override the default starting page and line with switches.
The E manual (this file) is never remembered in the file stack if you
get to it via the ⊗? command or the ? filename. Thus when you say ⊗?,
the first subsequent αH command will take you back to the file you
previously were in and a second αH will take you back, not to E.ALS,
but to the second previous file you were in prior to entering E.ALS.
The (⊗+ or ⊗-) ⊗#⊗XHOME command:
You can get back to the previous file in the stack AND AT THE SAME TIME
TO A SPECIFIC ABSOLUTE OR RELATIVE PAGE by using the ⊗XHOME command. An
absolute argument will position you to that page as you return to the
file, and a relative argument will position you that many pages from the
page where you would have otherwise returned. Thus ⊗4⊗XHOME will return
you to the previous file on page 4.
CLEARING THE STACKS:
The extended commands ZFILES, ZPAGES and ZLINES clear the file, page
and line stacks respectively.
⊗X ZFILES Zero (clear) the file stack.
⊗X ZPAGES Zero (clear) the page stack.
⊗X ZLINES Zero (clear) the line stack.
Undeleting lines of text: ⊗XUNDELETE
Modes Command Meaning
N,A UNDELETE Restore recently deleted or changed text
Deleted lines are saved (up to a certain limit) in the delete
stack and can be undeleted with the ⊗XUNDELETE command. Virtually every
time one or more lines of incore text are changed, the previous versions
of the changed lines are preserved in the delete stack. Thus the delete
stack includes not only lines that have been explicitly deleted, but also
lines that have been changed with the line editor, with a substitution
command, with a justification command, etc. Only the ⊗XCANCEL command
does away with incore text without the ability to retrieve it (if you
explicitly want to save some text over a ⊗XCANCEL command, you can either
attach that text or explicitly delete it for undeleting later).
The limit of deleted lines saved is indicated by a (settable)
maximum number of deleted characters; this limit is initially 5000
characters (approximately 1K of core). However, this limit is allowed to
be surpassed by a single command that itself deletes more than the current
limit of deleted characters. Thus the text deleting of any command
(except ⊗XCANCEL, which doesn't save in the delete stack the text being
cancelled) can be undone immediately, provided that no other command that
deletes lines is executed first. And, of course, even if another deleting
command is executed, the earlier deleted lines can still be undeleted if
the maximum character count for deleted lines is not exceeded. Lines are
undeleted in the opposite order from their deletion; that is, deleted
lines go into a stack. When the maximum deleted character count is caused
to be exceeded by a newly deleted line, one or more of the oldest deleted
lines (on the bottom of the stack) are flushed (forever) until the
character count is brought back within the limit, but lines deleted by the
current command are never flushed until another command deletes some more
lines.
When text is undeleted, the undeleted lines are removed from the
delete stack and inserted at the beginning of the attach buffer (even if
no lines were previous attached). (Note therefore that an undeleted line
cannot be undeleted again (unless it is re-deleted first)). Now here are
the descriptions of the various forms of the ⊗XUNDELETE command.
⊗XUNDELETE Undeletes (into the attach buffer) the last group
of lines that was deleted by a single command,
unless those lines have already been undeleted, in
which case this command (with no argument) won't
do anything (but complain).
⊗#⊗XUNDELETE Undeletes # lines (into the attach buffer).
⊗0⊗XUNDELETE Tells how many lines and characters can currently
be undeleted, and it will also tell what the
current deleted character limit is.
⊗-⊗#⊗XUNDELETE Sets the deleted character limit to # characters
(note the negative argument).
Lisp code indenting commands: α/ αβ/ ⊗XLISPSYNTAX
Modes Command Meaning
N,E α/ Lisp-indent current line by context above it
N,E αβ/ Lisp-indent next line by context above it
N,E ⊗#α/ Lisp-indent # lines from arrow by context above
N,E ⊗#αβ/ Lisp-indent # lines from next by context above
A α/ Lisp-indent first attached line (no-op!)
A αβ/ Lisp-indent first attached line in context of page
A ⊗#α/ Lisp-indent first # attached lines
A ⊗#αβ/ Lisp-indent first # attached lines in context of page
N,A,E LISPSYNTAX Examine and/or modify char interpretation by ⊗/ cmd
The α/ and αβ/ commands parse Lisp S-expressions and indent lines
accordingly (with tabs and spaces as needed). Text is never moved from
one line to another; only the indentation of each line is subject to
change. The ⊗#α/ command indents # lines (default is one line) starting
at the current line. Except in attach mode (see below), the ⊗#αβ/ does
the same thing as ⊗#α/ but first moves down a line (keeping you in line
insert mode if you are already in it). Both α/ and αβ/ without an arg
indent one line and leave you in the line editor positioned just after the
indentation (αβ/ moves down a line first, of course). When an explicit
arg is given, neither command leaves you in the line editor. All forms of
⊗/ can be given from within the line editor.
The ⊗/ command recognizes "super-brackets". This makes ] in the
text equivalent to enough )'s to close back to the matching [, or to close
all hanging ('s if no hanging [ is present to match.
The indentation set up is determined by examining the S-expression
which starts at or just before the current line, where that S-expression
is defined to begin at the nearest line that starts with either a left
parenthesis or a left square bracket (or their equivalents), or at the
beginning of the current page if no initial left parenthesis or left
bracket is found. However, the current line is not so checked for the
beginning of an S-expression when the command is given without an argument
nor when the command is given while in attach mode.
In attach mode, the α/ command does not look for any context
before the first line of the attach buffer, but the αβ/ command looks back
into the normal page text just ahead of the attach buffer to allow you to
indent the attach buffer while positioned at the proper place on the page.
A negative argument to either command means to indent the given
number of lines before the current line (without ever moving down a line);
in attach mode a negative argument makes the command a no-op.
The parsing of S-expressions is by MacLisp character set
interpretation, but the command ⊗XLISPSYNTAX described below allows
different character interpretations. For more details, see GLS.
MODIFYING LISP CHARACTER INTERPRETATIONS: ⊗XLISPSYNTAX
The command ⊗XLISPSYNTAX can be used to examine and/or modify the
syntax table which drives the ⊗/ (LISP indentation) command. This table
has one entry for each of the 128 (200 octal) characters. Each entry
consists of one or two characters which describe a LISP character syntax
category. The second (or only) character is a mnemonic for the role
played in the syntax of LISP S-expressions. The first character of two is
an auxiliary character used for certain kinds of matching, e.g. of string
quotes or super- brackets. The syntax types are:
TYPE NAME AUX? CHARACTERS WHICH INITIALLY HAVE THAT SYNTAX
( left paren no (
) right paren no )
[ left super no [
] right super yes ]
/ char quoter no / %
' quote macro no ` ' ,
| string quoter yes | "
↔ carriage return no CR
; semicolon yes ;
space no NULL TAB LF VT FORM SPACE BS
A letter no all others (e.g. A-Z a-z 0-9 + - * @ # ...)
(This initial arrangement represents a compromise between MacLISP and
InterLISP syntax. In MacLISP, there are no superbrackets, and only /
(and not %) is a character quoter. In InterLISP, only % (and not /)
is a character quoter; | does not serve as a string-like atom delimiter;
and semicolon is not a comment character.)
The auxiliary character is used for only a few special cases.
For a right superbracket, it is the character which is the matching
left superbracket. (Thus one can have several independent pairs of
superbrackets, in principle. This may not square with InterLISP
superbracket semantics, however.) For a comment character, it is the
character which terminates the comment. For a string quoter it is the
character which terminates the string (normally the same one which
begins it, but this extra flexibility is provided anyway).
The syntax table can be modified using the command:
⊗XLISPSYNTAX<space><octal of char to be affected><space>
<optional auxiliary char in octal, followed by space>
<representative mnemonic syntax char><CR>
Examples: to make < and > be parentheses, one would do:
⊗XLISPSYNTAX 74 (
⊗XLISPSYNTAX 76 )
To make % not be a character quoter, but only a letter:
⊗XLISPSYNTAX 45 A
To make ⊂ and ⊃ be superbrackets, one would say:
⊗XLISPSYNTAX 20 [
⊗XLISPSYNTAX 21 20 ]
The extra "20 " in the second one is needed to specify that ⊃ is
matched by ⊂. However, the first command is also needed explicitly
to define ⊂ as a left superbracket.
The command
⊗-⊗XLISPSYNTAX<CR>
resets all the interpretations to their initial default.
Finally, the command
⊗XLISPSYNTAX<space><octal of char><CR>
will merely cause E to type out the current interpretation of the char
given in octal.
In Terse mode (see ⊗XTERSE command), the typeout resulting from the
⊗XLISPSYNTAX command is suppressed except in the last case shown (which
is an explicit request for this typeout).